#include<bits/stdc++.h>
#define maxn 100005
using namespace std;
long long a[maxn+2],mid,ans;
struct tree{
long long r,l,pre,tag;
}t[maxn*4+2];
void build(int l,int r,int p){
t[p].l=l;
t[p].r=r;
if(l==r){
t[p].pre=a[l];
return;
}
mid=(l+r)/2;
build(l,mid,2*p);
build(mid+1,r,2*p+1);
t[p].pre=t[p*2].pre+t[p*2+1].pre;
}
void spread(int p){
if(t[p].tag){
t[p*2].pre+=t[p].tag*(t[p*2].r-t[p*2].l+1);
t[p*2+1].pre+=t[p].tag*(t[p*2+1].r-t[p*2+1].l+1);
t[p*2].tag=t[p].tag;
t[p*2+1].tag=t[p].tag;
t[p].tag=0;
}
}
void gai(int x,int y,int p,int shu){
if(x<=t[p].l&&y>=t[p].r){
t[p].tag+=shu;
t[p].pre+=shu*(t[p].r-t[p].l+1);
}
spread(p);
long long mid=(t[p].l+t[p].r)/2;
if(y>mid) gai(x,y,p*2,shu);
if(x<=mid) gai(x,y,p*2+1,shu);
t[p].pre=t[p*2].pre+t[p*2+1].pre;
}
long long cha(int p,int x,int y){
if(x<=t[p].l&&y>=t[p].r){
return t[p].pre;
}
spread(p);
long long mid=(t[p].l+t[p].r)/2;
if(x<=mid) ans+=cha(p*2+1,x,y);
if(y>mid) ans+=cha(p*2,x,y);
t[p].pre=t[p*2].pre+t[p*2+1].pre;
return ans;
}
int main(){
int n,m,biao,x,y,k;
cin>>n>>m;
build(1,n,1);
for(int i=0;i<n;i++){
cin>>a[i+1];
}
for(int i=0;i<m;i++){
cin>>biao;
if(biao==1){
cin>>x>>y>>k;
gai(x,y,1,k);
}else{
cin>>x>>y;
cout<<cha(1,x,y)<<endl;
}
}
return 0;
}