#include<bits/stdc++.h>
#define ll long long
#define getm int m=(s+t)>>1
#define ls p<<1
#define rs (p<<1)|1
#define update sgt[p]=sgt[ls]+sgt[rs]
#define pushdown \
if(laz[p]){\
laz[ls]+=laz[p],laz[rs]+=laz[p];\
sgt[ls]+=laz[p]*(m-s+1),sgt[rs]+=laz[p]*(t-m);\
laz[p]=0;\
}
#define if_in if(l<=s&&t<=r)
#define if_l if(l<=m)
#define if_r if(m<r)
#define goto_l l,r,s,m,ls
#define goto_r l,r,m+1,t,rs
using namespace std;
const int maxi=1e5+9;
int N,M;
ll a[maxi],sgt[maxi<<2],laz[maxi<<2];
ll rd(int l,int r,int s,int t,int p){
if_in return sgt[p];
getm;ll ans=0;
pushdown;
if_l ans+=rd(goto_l);
if_r ans+=rd(goto_r);
update;
return ans;
}
void wt(int l,int r,int s,int t,int p,int x){
if_in{
sgt[p]+=x*(t-s+1),laz[p]+=x;return;
}
getm;
pushdown;
if_l wt(goto_l,x);
if_r wt(goto_r,x);
update;
return;
}
void build(int s,int t,int p){
if(s==t)sgt[p]=a[s];
getm;
build(s,m,ls),build(m+1,t,rs);
update;
return;
}
int main(){
cin>>N>>M;
for(int i=1;i<=N;i++)scanf("%lld",&a[i]);
for(int i=1,x,y,k,op;i<=M;i++){
scanf("%d",&op);
if(op==1){
scanf("%d%d%d",&x,&y,&k);
wt(x,y,1,N,1,k);
}
if(op==2){
scanf("%d%d",&x,&y);
printf("%lld\n",rd(x,y,1,N,1));
}
}
return 0;
}