#include<bits/stdc++.h>
using namespace std;
long long ans[400004],num[100001],k[400004];
long long n,m;
long long left(long long a){
return a*2;
}
long long right(long long a){
return a*2+1;
}
void addd(long long l, long long r, long long nl, long long nr,long long p,long long kk){
if(l<=nl and r>=nr){
k[p]+=kk;
ans[p]+=kk+kk*(nr-nl);
return;
}
if(nl==nr){
return;
}
addd(l,r,nl,(nl+nr)/2,left(p),kk);
addd(l,r,((nl+nr)/2)+1,nr,right(p),kk);
return;
}
void jianzao(long long l,long long r,long long anss){
k[anss]=0;
if(r==l){
ans[anss]=num[r];
return;
}
else{
jianzao(l,(l+r)/2,left(anss));
jianzao(((l+r)/2)+1,r,right(anss)) ;
ans[anss]=ans[left(anss)]+ans[right(anss)];
return;
}
}
long long find(long long l, long long r, long long nl, long long nr,long long p) {
if(l<=nl and r>=nr)return ans[p];
if(nl==nr){
return 0;
}
k[left(p)]+=k[p];
k[right(p)]+=k[p];
ans[left(p)]+=k[p]+k[p]*(((nl+nr)/2)-nl);
ans[right(p)]+=k[p]+k[p]*(nr-(((nl+nr)/2)+1));
long long sum=0;
sum+=find(l,r,nl,(nl+nr)/2,left(p));
sum+=find(l,r,((nl+nr)/2)+1,nr,right(p));
return sum;
}
int main(){
cin>>n>>m;
for(long long i=1;i<=n;i++){
cin>>num[i];
}
jianzao(1,n,1);
while(m--){
long long b,x,y,kk;
cin>>b;
if(b==1){
cin>>x>>y>>kk;
addd(x,y,1,n,1,kk);
}
else{
cin>>x>>y;
cout<<find(x,y,1,n,1)<<endl;
}
}
}