#include <bits/stdc++.h>
#define ll long long
using namespace std;
int const maxn=10e5+5;
int a[maxn],mi[4*maxn];
int lz[4*maxn];
inline ll ls(ll x){
return x<<1;
}
inline ll rs(ll x){
return x<<1|1;
}
inline void push_up(ll p)
{
mi[p]=mi[ls(p)]+mi[rs(p)];
}
void build(ll p,ll l,ll r){
lz[p]=0;
if(l==r) {
mi[p]=a[l];
return ;
}
ll mid=(l+r)>>1;
build(ls(p),l,mid);
build(rs(p),mid+1,r);
}
inline void f(ll p,ll l,ll r,ll k){
lz[p]=lz[p]+k;
mi[p]+=k*(r-l+1);
}
inline void push_down(ll p,ll l,ll r){
ll mid=(l+r)>>1;
f(ls(p),l,mid,lz[p]);
f(rs(p),mid+1,r,lz[p]);
lz[p]=0;
}
void update(int k,int l,int r,int x,int y,int t){
if(l<=x&&y<=r){
mi[k]+=(y-x+1)*t;
lz[k]+=t;
return;
}
push_down(k,x,y);
int mid=(x+y)>>1;
if(l<=mid) update(ls(k),l,r,x,mid,t);
if(r>mid) update(rs(k),l,r,mid+1,y,t);
push_up(k);
}
long long getsum (int k,int l,int r,int x,int y){
ll res=0;
if(x<=l&&r<=y) return mi[k];
int mid=(l+r)/2;
push_down(k,l,r);
if(x<=mid) res+=getsum(ls(k),l,mid,x,y);
if(y>mid) res+=getsum(rs(k),mid+1,r,x,y);
return res;
}
int main(){
long long ans=0;
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
build(1,1,n);
for(int i=1;i<=m;i++){
int f,x,y;
scanf("%d%d%d",&f,&x,&y);
if(f==1){
int k;
scanf("%d",&k);
update(1,1,n,x,y,k);
}
else{
cout<<getsum(1,1,n,x,y)<<endl;
}
}
}