def solve():
import sys
sys.setrecursionlimit(10**6)
I=sys.stdin.readline
MOD=10**9+7
n=int(I())
arr=list(map(int,I().split()))
q=int(I())
size=1
while size<n: size*=2
t=[0]*(size*2)
p=[1]*(size*2)
d=[0]*(size*2)
a=[-1]*(size*2)
for i in range(n):
t[size+i]=arr[i] % MOD
for i in range(size-1,0,-1):
t[i]=(t[i*2]+t[i*2+1]) % MOD
def ps(i, s, e):
if i>=size: return
m=(s+e)//2
L=i*2; R=i*2+1
if a[i]!=-1:
a[L]=a[i]
a[R]=a[i]
p[L]=1; p[R]=1
d[L]=0; d[R]=0
t[L]=a[i]* (m-s+1) % MOD
t[R]=a[i]* (e-m) % MOD
a[i]=-1
if p[i]!=1:
if a[L]!=-1:
a[L]= a[L]*p[i] % MOD
else:
p[L]= p[L]*p[i] % MOD
d[L]= d[L]*p[i] % MOD
t[L]= t[L]*p[i] % MOD
if a[R]!=-1:
a[R]= a[R]*p[i] % MOD
else:
p[R]= p[R]*p[i] % MOD
d[R]= d[R]*p[i] % MOD
t[R]= t[R]*p[i] % MOD
p[i]=1
if d[i]!=0:
if a[L]!=-1:
a[L]=(a[L]+d[i]) % MOD
else:
d[L]=(d[L]+d[i]) % MOD
t[L]=(t[L]+ d[i]*(m-s+1)) % MOD
if a[R]!=-1:
a[R]=(a[R]+d[i]) % MOD
else:
d[R]=(d[R]+d[i]) % MOD
t[R]=(t[R]+ d[i]*(e-m)) % MOD
d[i]=0
def upd1(i, s, e, l, r, v):
if l<=s and e<=r:
t[i]=(t[i]+ v*(e-s+1)) % MOD
if a[i]!=-1:
a[i]=(a[i]+ v) % MOD
else:
d[i]=(d[i]+ v) % MOD
return
ps(i,s,e)
m=(s+e)//2
if l<=m: upd1(i*2, s, m, l, r, v)
if r>m: upd1(i*2+1, m+1, e, l, r, v)
t[i]=(t[i*2]+t[i*2+1]) % MOD
def upd2(i, s, e, l, r, v):
if l<=s and e<=r:
t[i]= t[i]*v % MOD
if a[i]!=-1:
a[i]= a[i]*v % MOD
else:
p[i]= p[i]*v % MOD
d[i]= d[i]*v % MOD
return
ps(i,s,e)
m=(s+e)//2
if l<=m: upd2(i*2, s, m, l, r, v)
if r>m: upd2(i*2+1, m+1, e, l, r, v)
t[i]=(t[i*2]+t[i*2+1]) % MOD
def upd3(i, s, e, l, r, v):
if l<=s and e<=r:
t[i]= v*(e-s+1) % MOD
a[i]= v
p[i]=1
d[i]=0
return
ps(i,s,e)
m=(s+e)//2
if l<=m: upd3(i*2, s, m, l, r, v)
if r>m: upd3(i*2+1, m+1, e, l, r, v)
t[i]=(t[i*2]+t[i*2+1]) % MOD
def qry(i, s, e, l, r):
if l<=s and e<=r:
return t[i]
ps(i,s,e)
m=(s+e)//2
res=0
if l<=m: res=(res+qry(i*2, s, m, l, r)) % MOD
if r>m: res=(res+qry(i*2+1, m+1, e, l, r)) % MOD
return res
out=[]
for _ in range(q):
tmp=list(map(int,I().split()))
if tmp[0]==1:
_,x,y,v=tmp
upd1(1,1,size,x,y,v)
elif tmp[0]==2:
_,x,y,v=tmp
upd2(1,1,size,x,y,v)
elif tmp[0]==3:
_,x,y,v=tmp
upd3(1,1,size,x,y,v)
else:
_,x,y=tmp
out.append(str(qry(1,1,size,x,y)))
sys.stdout.write("\n".join(out))
if __name__=="__main__":
solve()
ZGVmIHNvbHZlKCk6CiAgICBpbXBvcnQgc3lzCiAgICBzeXMuc2V0cmVjdXJzaW9ubGltaXQoMTAqKjYpCiAgICBJPXN5cy5zdGRpbi5yZWFkbGluZQogICAgTU9EPTEwKio5KzcKICAgIG49aW50KEkoKSkKICAgIGFycj1saXN0KG1hcChpbnQsSSgpLnNwbGl0KCkpKQogICAgcT1pbnQoSSgpKQogICAgc2l6ZT0xCiAgICB3aGlsZSBzaXplPG46IHNpemUqPTIKICAgIHQ9WzBdKihzaXplKjIpCiAgICBwPVsxXSooc2l6ZSoyKQogICAgZD1bMF0qKHNpemUqMikKICAgIGE9Wy0xXSooc2l6ZSoyKQogICAgZm9yIGkgaW4gcmFuZ2Uobik6CiAgICAgICAgdFtzaXplK2ldPWFycltpXSAlIE1PRAogICAgZm9yIGkgaW4gcmFuZ2Uoc2l6ZS0xLDAsLTEpOgogICAgICAgIHRbaV09KHRbaSoyXSt0W2kqMisxXSkgJSBNT0QKICAgIGRlZiBwcyhpLCBzLCBlKToKICAgICAgICBpZiBpPj1zaXplOiByZXR1cm4KICAgICAgICBtPShzK2UpLy8yCiAgICAgICAgTD1pKjI7IFI9aSoyKzEKICAgICAgICBpZiBhW2ldIT0tMToKICAgICAgICAgICAgYVtMXT1hW2ldCiAgICAgICAgICAgIGFbUl09YVtpXQogICAgICAgICAgICBwW0xdPTE7IHBbUl09MQogICAgICAgICAgICBkW0xdPTA7IGRbUl09MAogICAgICAgICAgICB0W0xdPWFbaV0qIChtLXMrMSkgJSBNT0QKICAgICAgICAgICAgdFtSXT1hW2ldKiAoZS1tKSAlIE1PRAogICAgICAgICAgICBhW2ldPS0xCiAgICAgICAgaWYgcFtpXSE9MToKICAgICAgICAgICAgaWYgYVtMXSE9LTE6CiAgICAgICAgICAgICAgICBhW0xdPSBhW0xdKnBbaV0gJSBNT0QKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHBbTF09IHBbTF0qcFtpXSAlIE1PRAogICAgICAgICAgICAgICAgZFtMXT0gZFtMXSpwW2ldICUgTU9ECiAgICAgICAgICAgIHRbTF09IHRbTF0qcFtpXSAlIE1PRAogICAgICAgICAgICBpZiBhW1JdIT0tMToKICAgICAgICAgICAgICAgIGFbUl09IGFbUl0qcFtpXSAlIE1PRAogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcFtSXT0gcFtSXSpwW2ldICUgTU9ECiAgICAgICAgICAgICAgICBkW1JdPSBkW1JdKnBbaV0gJSBNT0QKICAgICAgICAgICAgdFtSXT0gdFtSXSpwW2ldICUgTU9ECiAgICAgICAgICAgIHBbaV09MQogICAgICAgIGlmIGRbaV0hPTA6CiAgICAgICAgICAgIGlmIGFbTF0hPS0xOgogICAgICAgICAgICAgICAgYVtMXT0oYVtMXStkW2ldKSAlIE1PRAogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgZFtMXT0oZFtMXStkW2ldKSAlIE1PRAogICAgICAgICAgICB0W0xdPSh0W0xdKyBkW2ldKihtLXMrMSkpICUgTU9ECiAgICAgICAgICAgIGlmIGFbUl0hPS0xOgogICAgICAgICAgICAgICAgYVtSXT0oYVtSXStkW2ldKSAlIE1PRAogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgZFtSXT0oZFtSXStkW2ldKSAlIE1PRAogICAgICAgICAgICB0W1JdPSh0W1JdKyBkW2ldKihlLW0pKSAlIE1PRAogICAgICAgICAgICBkW2ldPTAKICAgIGRlZiB1cGQxKGksIHMsIGUsIGwsIHIsIHYpOgogICAgICAgIGlmIGw8PXMgYW5kIGU8PXI6CiAgICAgICAgICAgIHRbaV09KHRbaV0rIHYqKGUtcysxKSkgJSBNT0QKICAgICAgICAgICAgaWYgYVtpXSE9LTE6CiAgICAgICAgICAgICAgICBhW2ldPShhW2ldKyB2KSAlIE1PRAogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgZFtpXT0oZFtpXSsgdikgJSBNT0QKICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgcHMoaSxzLGUpCiAgICAgICAgbT0ocytlKS8vMgogICAgICAgIGlmIGw8PW06IHVwZDEoaSoyLCBzLCBtLCBsLCByLCB2KQogICAgICAgIGlmIHI+bTogdXBkMShpKjIrMSwgbSsxLCBlLCBsLCByLCB2KQogICAgICAgIHRbaV09KHRbaSoyXSt0W2kqMisxXSkgJSBNT0QKICAgIGRlZiB1cGQyKGksIHMsIGUsIGwsIHIsIHYpOgogICAgICAgIGlmIGw8PXMgYW5kIGU8PXI6CiAgICAgICAgICAgIHRbaV09IHRbaV0qdiAlIE1PRAogICAgICAgICAgICBpZiBhW2ldIT0tMToKICAgICAgICAgICAgICAgIGFbaV09IGFbaV0qdiAlIE1PRAogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcFtpXT0gcFtpXSp2ICUgTU9ECiAgICAgICAgICAgICAgICBkW2ldPSBkW2ldKnYgJSBNT0QKICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgcHMoaSxzLGUpCiAgICAgICAgbT0ocytlKS8vMgogICAgICAgIGlmIGw8PW06IHVwZDIoaSoyLCBzLCBtLCBsLCByLCB2KQogICAgICAgIGlmIHI+bTogdXBkMihpKjIrMSwgbSsxLCBlLCBsLCByLCB2KQogICAgICAgIHRbaV09KHRbaSoyXSt0W2kqMisxXSkgJSBNT0QKICAgIGRlZiB1cGQzKGksIHMsIGUsIGwsIHIsIHYpOgogICAgICAgIGlmIGw8PXMgYW5kIGU8PXI6CiAgICAgICAgICAgIHRbaV09IHYqKGUtcysxKSAlIE1PRAogICAgICAgICAgICBhW2ldPSB2CiAgICAgICAgICAgIHBbaV09MQogICAgICAgICAgICBkW2ldPTAKICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgcHMoaSxzLGUpCiAgICAgICAgbT0ocytlKS8vMgogICAgICAgIGlmIGw8PW06IHVwZDMoaSoyLCBzLCBtLCBsLCByLCB2KQogICAgICAgIGlmIHI+bTogdXBkMyhpKjIrMSwgbSsxLCBlLCBsLCByLCB2KQogICAgICAgIHRbaV09KHRbaSoyXSt0W2kqMisxXSkgJSBNT0QKICAgIGRlZiBxcnkoaSwgcywgZSwgbCwgcik6CiAgICAgICAgaWYgbDw9cyBhbmQgZTw9cjoKICAgICAgICAgICAgcmV0dXJuIHRbaV0KICAgICAgICBwcyhpLHMsZSkKICAgICAgICBtPShzK2UpLy8yCiAgICAgICAgcmVzPTAKICAgICAgICBpZiBsPD1tOiByZXM9KHJlcytxcnkoaSoyLCBzLCBtLCBsLCByKSkgJSBNT0QKICAgICAgICBpZiByPm06IHJlcz0ocmVzK3FyeShpKjIrMSwgbSsxLCBlLCBsLCByKSkgJSBNT0QKICAgICAgICByZXR1cm4gcmVzCiAgICBvdXQ9W10KICAgIGZvciBfIGluIHJhbmdlKHEpOgogICAgICAgIHRtcD1saXN0KG1hcChpbnQsSSgpLnNwbGl0KCkpKQogICAgICAgIGlmIHRtcFswXT09MToKICAgICAgICAgICAgXyx4LHksdj10bXAKICAgICAgICAgICAgdXBkMSgxLDEsc2l6ZSx4LHksdikKICAgICAgICBlbGlmIHRtcFswXT09MjoKICAgICAgICAgICAgXyx4LHksdj10bXAKICAgICAgICAgICAgdXBkMigxLDEsc2l6ZSx4LHksdikKICAgICAgICBlbGlmIHRtcFswXT09MzoKICAgICAgICAgICAgXyx4LHksdj10bXAKICAgICAgICAgICAgdXBkMygxLDEsc2l6ZSx4LHksdikKICAgICAgICBlbHNlOgogICAgICAgICAgICBfLHgseT10bXAKICAgICAgICAgICAgb3V0LmFwcGVuZChzdHIocXJ5KDEsMSxzaXplLHgseSkpKQogICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iLmpvaW4ob3V0KSkKaWYgX19uYW1lX189PSJfX21haW5fXyI6CiAgICBzb2x2ZSgpCg==