#include <bits/stdc++.h>
#define LL long long
using namespace std;
LL tr[270000], lazy[270000], a[100005], n, k, ll, rr;
void build(LL l, LL r, LL now)
{
if(l == r) {
tr[now] = a[l];
return ;
}
LL m(l + ((r - l) >> 1));
build(l, m, now << 1), build(m + 1, r, (now << 1) | 1);
tr[now] = tr[now << 1] + tr[(now << 1) | 1];
}
void add(LL l, LL r, LL now)
{
if(ll <= l && r <= rr) {
tr[now] += (r - l + 1) * k, lazy[now] += k;
return ;
}
LL m(l + ((r - l) >> 1));
if(lazy[now])
tr[now << 1] += lazy[now] * (m - l + 1), tr[now << 1 | 1] += lazy[now] * (r - m),
lazy[now << 1] += lazy[now], lazy[now << 1 | 1] += lazy[now];
lazy[now] = 0;
if(ll <= m)
add(l, m, now << 1);
if(m < rr)
add(m + 1, r, (now << 1) | 1);
tr[now] = tr[now << 1] + tr[(now << 1) | 1];
}
LL check(LL l, LL r, LL now)
{
if(ll <= l && r <= rr) return tr[now];
LL m(l + ((r - l) >> 1));
if(lazy[now])
tr[now << 1] += lazy[now] * (m - l + 1), tr[now << 1 | 1] += lazy[now] * (r - m),
lazy[now << 1] += lazy[now], lazy[now << 1 | 1] += lazy[now];
lazy[now] = 0;
LL sum(0);
if(ll <= m)
sum = check(l, m, now << 1);
if(m < rr)
sum += check(m + 1, r, (now << 1) | 1);
return sum;
}
int main()
{
LL t, f;
scanf("%d %d", &n, &t);
for(LL i(1); i <= n; ++ i) scanf("%d", &a[i]);
build(1, n, 1);
while(t --) {
scanf("%d %d %d", &f, &ll, &rr);
if(f == 2)
printf("%d\n", check(1, n, 1));
else
scanf("%d", &k), add(1, n, 1);
}
return (0);
}