type jd=record
z,y,lc,rc,sum,toadd:int64;
end;
var
tree:array[0..800000] of jd;
qzh:array[0..200000] of int64;
x:array[1..200000] of int64;
n,m,a,b,k,ans,tot,t:int64;
i,j:longint;
function min(a,b:longint):longint;
begin
if a<b then exit(a) else exit(b);
end;
function max(a,b:longint):longint;
begin
if a>b then exit(a) else exit(b);
end;
procedure maketree(a,b:longint);
var
mid,t:longint;
begin
inc(tot);
t:=tot;
tree[t].z:=a;tree[t].y:=b;
tree[t].sum:=qzh[b]-qzh[a-1];
mid:=(a+b) div 2;
if a<b then
begin
tree[t].lc:=tot+1;
maketree(a,mid);
tree[t].rc:=tot+1;
maketree(mid+1,b);
end;
end;
procedure add(po,a,b,k:longint);
var
mid:longint;
begin
mid:=(tree[po].z+tree[po].y) div 2;
tree[po].sum:=tree[po].sum+k*(min(b,tree[po].y)-max(a,tree[po].z)+1)+tree[po].toadd*(tree[po].y-tree[po].z+1);
if tree[po].toadd<>0 then
begin
tree[tree[po].lc].toadd:=tree[tree[po].lc].toadd+tree[po].toadd;
tree[tree[po].rc].toadd:=tree[tree[po].rc].toadd+tree[po].toadd;
tree[po].toadd:=0;
end;
if (a=tree[po].z)and(b=tree[po].y) then
begin
tree[tree[po].lc].toadd:=tree[tree[po].lc].toadd+k;
tree[tree[po].rc].toadd:=tree[tree[po].rc].toadd+k;
end else
begin
if a<=mid then add(tree[po].lc,a,min(b,mid),k);
if b>mid then add(tree[po].rc,max(a,mid+1),b,k);
end;
end;
procedure getans(po,a,b:longint);
var
mid:longint;
begin
if tree[po].toadd<>0 then
begin
tree[po].sum:=tree[po].sum+tree[po].toadd*(tree[po].y-tree[po].z+1);
tree[tree[po].lc].toadd:=tree[tree[po].lc].toadd+tree[po].toadd;
tree[tree[po].rc].toadd:=tree[tree[po].rc].toadd+tree[po].toadd;
tree[po].toadd:=0;
end;
mid:=(tree[po].z+tree[po].y) div 2;
if (a=tree[po].z) and (b=tree[po].y) then
ans:=ans+tree[po].sum else
begin
if a<=mid then getans(tree[po].lc,a,min(b,mid));
if b>mid then getans(tree[po].rc,max(a,mid+1),b);
end;
end;
begin
readln(n);
for i:=1 to n do
begin
read(x[i]);
qzh[i]:=qzh[i-1]+x[i];
end;
maketree(1,n);
read(m);
for i:=1 to m do
begin
read(t);
if t=1 then
begin
read(a,b,k);
add(1,a,b,k);
end;
if t=2 then
begin
read(a,b);
ans:=0;
getans(1,a,b);
writeln(ans);
end;
end;
end.