RT 调不动了
//LYC_music yyds!
#include<bits/stdc++.h>
#define int long long
//#define N 1000001
using namespace std;
inline int read()
{
int pos=1,num=0;
char ch=getchar();
while (!isdigit(ch))
{
if (ch=='-') pos=-1;
ch=getchar();
}
while (isdigit(ch))
{
num=num*10+(int)(ch-'0');
ch=getchar();
}
return pos*num;
}
inline void write(int x)
{
if (x<0)
{
putchar('-');
write(-x);
return;
}
if (x>=10) write(x/10);
putchar(x%10+'0');
}
inline void writesp(int x)
{
write(x);
putchar(' ');
}
inline void writeln(int x)
{
write(x);
putchar('\n');
}
const int N=200001;
int l,r,ans,L[N],R[N],pos[N],pre[501][501],suf[501][501],sum[N],a[N],s[501][501],n,len,cnt,m,mod=1e9+7,Q,x,y,z;
inline void build()
{
len=sqrt(n);
while (++cnt)
{
L[cnt]=R[cnt-1]+1; R[cnt]=min(len*cnt,n);
for (register int i=L[cnt];i<=R[cnt];i++)
{
pos[i]=cnt;
sum[cnt]+=a[i];
}
if (R[cnt]==n) break;
}
}
signed main()
{
n=read(); m=read();
for (register int i=1;i<=n;i++)
a[i]=read();
build();
for (register int i=1;i<=m;i++)
{
Q=read();
if (Q==1)
{
x=read(); y=read(); z=read();
if (x>len)
{
for (register int i=y;i<=n;i+=x)
{
a[i]+=z;
sum[pos[i]]+=z;
}
continue;
}
for (register int i=y;i<=x;i++)
{
pre[x][i]+=z;
pre[x][i]%=mod;
}
for (register int i=1;i<=y;i++)
{
suf[x][i]+=z;
suf[x][i]%=mod;
}
}
else
{
x=read(); y=read();
l=pos[x],r=pos[y],ans=0;
if (l==r)
{
for (register int i=x;i<=y;i++)
(ans+=a[i])%=mod;
}
else
{
for (register int i=x;i<=R[l];i++)
(ans+=a[i])%=mod;
for (register int i=l+1;i<=r-1;i++)
(ans+=sum[i])%=mod;
for (register int i=L[r];i<=y;i++)
(ans+=a[i])%=mod;
}
for (int i=1;i<=len;i++)
{
register int p=(x-1)/i+1;
register int q=(y-1)/i+1;
if (p!=q) ans=(ans+1LL*(q-p-1)*pre[i][i]+suf[i][x-(p-1)*i]+pre[i][y-(q-1)*i])%mod;
else ans=(ans+pre[i][y-(q-1)*i]-pre[i][x-1-(q-1)*i])%mod;
}
writeln((ans+mod)%mod);
}
}
}