#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;
const int N=1e6+10;
ll n,m,u;
ll a[N],ans[N],x,y,k,tip[N];
void build(ll p,ll l,ll r){
tip[p]=0;
if(l==r){ans[p]=a[l];return;}
ll mid=(l+r)>>1;
build(2*p,l,mid);
build(2*p+1,mid+1,r);
ans[p]=ans[p*2]+ans[p*2+1];
}
void add(ll nl,ll nr,ll l,ll r,ll p,ll k){
if(l<=nl&&r>=nr){
tip[p]+=k;ans[p]+=k*(nr-nl+1);return;
}
ll mid=(nl+nr)>>1;
tip[2*p]+=k;
tip[2*p+1]+=k;
ans[2*p]+=(mid-nl+1)*k;
ans[2*p+1]+=(nr-mid)*k;
tip[p]=0;
if(l<=mid) add(nl,mid,l,r,p*2,k);
if(r>mid) add(mid+1,nr,l,r,p*2+1,k);
ans[p]=ans[p*2]+ans[p*2+1];
}
ll ask(ll nl,ll nr,ll l,ll r,ll p){
ll res=0;
if(l<=nl&&r>=nr) return ans[p];
ll mid=(nl+nr)>>1;
tip[2*p]+=k;
tip[2*p+1]+=k;
ans[2*p]+=(mid-nl+1)*k;
ans[2*p+1]+=(nr-mid)*k;
tip[p]=0;
if(l<=mid) res+=ask(nl,mid,l,r,p*2);
if(r>mid) res+=ask(mid+1,nr,l,r,p*2+1);//r>mid
return res;
}
int main(){
// ios::sync_with_stdio(false);
// cin.tie(0);
// cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
// for(int i=1;i<=n;i++)
// add(1,n,i,i,1,a[i]);
build(1,1,n);
// for(int i=1;;i++) {
// if(ans[i]==0) break;
// cout<<ans[i]<<" ";
// }
while(m--){
cin>>u;
if(u==1){
cin>>x>>y>>k;
add(1,n,x,y,1,k);
}
else if(u==2){
cin>>x>>y;
cout<<ask(1,n,x,y,1)<<endl;
}
}
return 0;
}