#include<bits/stdc++.h>
using namespace std;
const int N=100005;
long long a,b,c,d,e,f;
int n,w[N];
struct node{
int l,r,sum,add;
};
node tr[N*4];
void push_up(int p){
tr[p].sum=tr[p<<1].sum+tr[p<<1|1].sum;
}
void push_down(int p){
if(tr[p].add){
tr[p<<1].sum+=tr[p].add*(tr[p<<1].r-tr[p<<1].l+1);
tr[p<<1|1].sum+=tr[p].add*(tr[p<<1|1].r-tr[p<<1].l+1);
tr[p<<1].add+=tr[p].add;
tr[p<<1|1].add+=tr[p].add;
tr[p].add=0;
}
}
void build(int p,int il,int ir){
tr[p]={il,ir,w[il]};
if(il==ir)return ;
int m=il+ir>>1;
build(p<<1,il,m);
build(p<<1|1,m+1,ir);
push_up(p);
return ;
}
void updata(int p,int x,int y,int k){
if(tr[p].l>=x&&tr[p].r<=y){
tr[p].sum+=((tr[p].r-tr[p].l+1)*k);
tr[p].add+=k;
return ;
}
int m=tr[p].l+tr[p].r>>1;
push_down(p);
if(x<=m)updata(p<<1,x,y,k);
if(y>m)updata(p<<1|1,x,y,k);
push_up(p);
return ;
}
int querty(int p,int x,int y){
if(x<=tr[p].l&&tr[p].r<=y)return tr[p].sum;
int m=tr[p].l+tr[p].r>>1;
push_down(p);
int sum=0;
if(x<=m)sum+=querty(p<<1,x,y);
if(y>m)sum+=querty(p<<1|1,x,y);
return sum;
}
int main(){
cin>>a>>b;
for(int i=1;i<=a;i++)cin>>w[i];
build(1,1,a);
for(int i=0;i<b;i++){
cin>>c;
if(c==1){
cin>>d>>e>>f;
updata(1,d,e,f);
}
else{
cin>>d>>e;
cout<<querty(1,d,e)<<endl;
}
}
return 0;
}