#include<bits/stdc++.h>
using namespace std;
inline long long read()
{
long long x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
return x*f;
}
long long n,m;
long long a[2000200],c[2000200];
long long lowbit(long long x) { return x&(-x);}
void add(long long x,long long v){
for( ;x<=n;x+=lowbit(x)) c[x]+=v;
}
long long sum(long long x){
long long s=0;
for(;x>0;x-=lowbit(x)) s+=c[x];
return s;
}
signed main() {
n=read(),m=read();
for(register long long i=1;i<=n;i++) a[i]=read(),add(i,a[i]);
while(m--){
long long op=read();
if(op==1){
long long x=read(),y=read(),z=read();
for(register long long i=y;i<=n;i+=x) add(i,z);
}else{
long long l=read(),r=read();
printf("%lld\n",(sum(r)-sum(l-1))%1000000007);
}
}
return 0;
}
80分,最后两点T了