#include <bits/stdc++.h>
using namespace std;
#define sd(x) scanf("%d", &x)
#define F first
#define S second
#define PB push_back
#define MP make_pair
typedef pair<int, int> pii;
typedef pair< pii, pii > QT;
typedef long long int LL;
#define rep(i, j, k) for(int i = j; i < k; ++i)
#define N 112345
#define M 2123456
#define B 350
#define MOD 1000000007
inline void norm(int &x){
if(x >= MOD){
x -= MOD;
}
if(x < 0){
x += MOD;
}
}
inline LL powerMod(LL a, LL p, LL mod){
LL ret = 1;
a %= mod;
while(p > 0){
if(p & 1){
ret *= a;
ret %= mod;
}
p >>= 1;
a *= a;
a %= mod;
}
return ret;
}
bool comp(QT a, QT b){
if(a.F.F / B == b.F.F / B){
return a.F.S < b.F.S;
}
return a.F.F < b.F.F;
}
vector<int> divs[N];
int mu[N], spf[N];
LL fac[N], ifac[N];
inline LL com(int n, int r){
if(n < r){
return 0;
}
LL ret = fac[n];
ret *= ifac[r];
ret %= MOD;
ret *= ifac[n - r];
ret %= MOD;
return ret;
}
inline void pre(){
mu[1] = 1;
fac[1] = 1;
fac[0] = 1;
rep(i, 2, N){
fac[i] = (fac[i - 1] * i) % MOD;
if(spf[i] == 0){
spf[i] = i;
for(int j = i; j < N; j += i){
spf[j] = i;
}
}
mu[i] = - mu[i / spf[i]];
if((i / spf[i]) % spf[i] == 0){
mu[i] = 0;
}
}
int x = 0;
ifac[N - 1] = powerMod(fac[N - 1], MOD - 2, MOD);
rep(i, 1, N){
ifac[N - i - 1] = (ifac[N - i] * (N - i)) % MOD;
if(mu[i] != 0){
if(i <= 10000){
x++;
}
for(int j = i; j < N; j += i){
divs[j].PB(i);
}
}
}
}
bool alive[M];
int id[N], rid[M], cnt[N], sz;
int cntp[N], cntn[N];
inline void add(int k, int x){
if(k < B){
if(mu[x] == 1){
cntp[k]++;
}
else{
cntn[k]++;
}
return;
}
id[x] = sz;
rid[sz] = x;
alive[sz] = true;
sz++;
}
inline void rem(int k, int x){
if(k < B){
if(mu[x] == 1){
cntp[k]--;
}
else{
cntn[k]--;
}
return;
}
alive[id[x]] = false;
}
inline void inc(int x){
if(cnt[x] >= B){
cnt[x]++;
return;
}
rem(cnt[x], x);
cnt[x]++;
add(cnt[x], x);
}
inline void dec(int x){
if(cnt[x] >= B + 1){
cnt[x]--;
return;
}
rem(cnt[x], x);
cnt[x]--;
add(cnt[x], x);
}
inline void incad(int x){
rep(i, 0, divs[x].size()){
inc(divs[x][i]);
}
}
inline void decad(int x){
rep(i, 0, divs[x].size()){
dec(divs[x][i]);
}
}
int ans[N], a[N];
QT query[N];
int main(){
pre();
int n, q, l, r, cl, cr, ck, ci, csz, k;
sd(n);
rep(i, 1, n + 1){
sd(a[i]);
}
sd(q);
rep(i, 0, q){
sd(query[i].F.F); sd(query[i].F.S); sd(query[i].S.F);
query[i].S.S = i;
}
sort(query, query + q, comp);
l = r = 1;
sz = 0;
incad(a[1]);
rep(i, 0, q){
cl = query[i].F.F;
cr = query[i].F.S;
ck = query[i].S.F;
ci = query[i].S.S;
while(r < cr){
incad(a[r + 1]);
r++;
}
while(l > cl){
incad(a[l - 1]);
--l;
}
while(l < cl){
decad(a[l]);
l++;
}
while(r > cr){
decad(a[r]);
--r;
}
ans[ci] = 0;
rep(j, ck, B){
if(cntp[j] - cntn[j] != 0){
ans[ci] += (com(j, ck) * (cntp[j] - cntn[j])) % MOD;
norm(ans[ci]);
}
}
csz = 0;
rep(j, 0, sz){
if(alive[j] == true){
k = rid[j];
rid[csz] = k;
id[k] = csz;
alive[csz] = true;
csz++;
if(mu[k] == 0 || cnt[k] < ck){
continue;
}
if(mu[k] == 1){
ans[ci] += com(cnt[k], ck);
norm(ans[ci]);
}
else{
ans[ci] -= com(cnt[k], ck);
norm(ans[ci]);
}
}
}
sz = csz;
}
rep(i, 0, q){
printf("%d\n", ans[i]);
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBzZCh4KSBzY2FuZigiJWQiLCAmeCkKI2RlZmluZSBGIGZpcnN0CiNkZWZpbmUgUyBzZWNvbmQKI2RlZmluZSBQQiBwdXNoX2JhY2sKI2RlZmluZSBNUCBtYWtlX3BhaXIKCnR5cGVkZWYgcGFpcjxpbnQsIGludD4gcGlpOwp0eXBlZGVmIHBhaXI8IHBpaSwgcGlpID4gUVQ7CnR5cGVkZWYgbG9uZyBsb25nIGludCBMTDsKCiNkZWZpbmUgcmVwKGksIGosIGspIGZvcihpbnQgaSA9IGo7IGkgPCBrOyArK2kpCgojZGVmaW5lIE4gMTEyMzQ1CiNkZWZpbmUgTSAyMTIzNDU2CiNkZWZpbmUgQiAzNTAKI2RlZmluZSBNT0QgMTAwMDAwMDAwNwoKaW5saW5lIHZvaWQgbm9ybShpbnQgJngpewoJaWYoeCA+PSBNT0QpewoJCXggLT0gTU9EOwoJfQoJaWYoeCA8IDApewoJCXggKz0gTU9EOwoJfQp9CgppbmxpbmUgTEwgcG93ZXJNb2QoTEwgYSwgTEwgcCwgTEwgbW9kKXsKCUxMIHJldCA9IDE7CglhICU9IG1vZDsKCXdoaWxlKHAgPiAwKXsKCQlpZihwICYgMSl7CgkJCXJldCAqPSBhOwoJCQlyZXQgJT0gbW9kOwoJCX0KCQlwID4+PSAxOwoJCWEgKj0gYTsKCQlhICU9IG1vZDsKCX0KCXJldHVybiByZXQ7Cn0KCmJvb2wgY29tcChRVCBhLCBRVCBiKXsKCWlmKGEuRi5GIC8gQiA9PSBiLkYuRiAvIEIpewoJCXJldHVybiBhLkYuUyA8IGIuRi5TOwoJfQoJcmV0dXJuIGEuRi5GIDwgYi5GLkY7Cn0KCnZlY3RvcjxpbnQ+IGRpdnNbTl07CmludCBtdVtOXSwgc3BmW05dOwpMTCBmYWNbTl0sIGlmYWNbTl07CgppbmxpbmUgTEwgY29tKGludCBuLCBpbnQgcil7CglpZihuIDwgcil7CgkJcmV0dXJuIDA7Cgl9CglMTCByZXQgPSBmYWNbbl07CglyZXQgKj0gaWZhY1tyXTsKCXJldCAlPSBNT0Q7CglyZXQgKj0gaWZhY1tuIC0gcl07CglyZXQgJT0gTU9EOwoJcmV0dXJuIHJldDsKfQoKaW5saW5lIHZvaWQgcHJlKCl7CgltdVsxXSA9IDE7CglmYWNbMV0gPSAxOwoJZmFjWzBdID0gMTsKCXJlcChpLCAyLCBOKXsKCQlmYWNbaV0gPSAoZmFjW2kgLSAxXSAqIGkpICUgTU9EOwoJCWlmKHNwZltpXSA9PSAwKXsKCQkJc3BmW2ldID0gaTsKCQkJZm9yKGludCBqID0gaTsgaiA8IE47IGogKz0gaSl7CgkJCQlzcGZbal0gPSBpOwoJCQl9CgkJfQoJCW11W2ldID0gLSBtdVtpIC8gc3BmW2ldXTsKCQlpZigoaSAvIHNwZltpXSkgJSBzcGZbaV0gPT0gMCl7CgkJCW11W2ldID0gMDsKCQl9Cgl9CglpbnQgeCA9IDA7CglpZmFjW04gLSAxXSA9IHBvd2VyTW9kKGZhY1tOIC0gMV0sIE1PRCAtIDIsIE1PRCk7CglyZXAoaSwgMSwgTil7CgkJaWZhY1tOIC0gaSAtIDFdID0gKGlmYWNbTiAtIGldICogKE4gLSBpKSkgJSBNT0Q7CgkJaWYobXVbaV0gIT0gMCl7CgkJCWlmKGkgPD0gMTAwMDApewoJCQkJeCsrOwoJCQl9CgkJCWZvcihpbnQgaiA9IGk7IGogPCBOOyBqICs9IGkpewoJCQkJZGl2c1tqXS5QQihpKTsKCQkJfQoJCX0KCX0KfQoKYm9vbCBhbGl2ZVtNXTsKaW50IGlkW05dLCByaWRbTV0sIGNudFtOXSwgc3o7CmludCBjbnRwW05dLCBjbnRuW05dOwoKaW5saW5lIHZvaWQgYWRkKGludCBrLCBpbnQgeCl7CglpZihrIDwgQil7CgkJaWYobXVbeF0gPT0gMSl7CgkJCWNudHBba10rKzsKCQl9CgkJZWxzZXsKCQkJY250bltrXSsrOwoJCX0KCQlyZXR1cm47Cgl9CglpZFt4XSA9IHN6OwoJcmlkW3N6XSA9IHg7CglhbGl2ZVtzel0gPSB0cnVlOwoJc3orKzsKfQoKaW5saW5lIHZvaWQgcmVtKGludCBrLCBpbnQgeCl7CglpZihrIDwgQil7CgkJaWYobXVbeF0gPT0gMSl7CgkJCWNudHBba10tLTsKCQl9CgkJZWxzZXsKCQkJY250bltrXS0tOwoJCX0KCQlyZXR1cm47Cgl9CglhbGl2ZVtpZFt4XV0gPSBmYWxzZTsKfQoKaW5saW5lIHZvaWQgaW5jKGludCB4KXsKCWlmKGNudFt4XSA+PSBCKXsKCQljbnRbeF0rKzsKCQlyZXR1cm47Cgl9CglyZW0oY250W3hdLCB4KTsKCWNudFt4XSsrOwoJYWRkKGNudFt4XSwgeCk7Cn0KCmlubGluZSB2b2lkIGRlYyhpbnQgeCl7CglpZihjbnRbeF0gPj0gQiArIDEpewoJCWNudFt4XS0tOwoJCXJldHVybjsKCX0KCXJlbShjbnRbeF0sIHgpOwoJY250W3hdLS07CglhZGQoY250W3hdLCB4KTsKfQoKaW5saW5lIHZvaWQgaW5jYWQoaW50IHgpewoJcmVwKGksIDAsIGRpdnNbeF0uc2l6ZSgpKXsKCQlpbmMoZGl2c1t4XVtpXSk7Cgl9Cn0KCmlubGluZSB2b2lkIGRlY2FkKGludCB4KXsKCXJlcChpLCAwLCBkaXZzW3hdLnNpemUoKSl7CgkJZGVjKGRpdnNbeF1baV0pOwoJfQp9CgppbnQgYW5zW05dLCBhW05dOwpRVCBxdWVyeVtOXTsKCmludCBtYWluKCl7CglwcmUoKTsKCWludCBuLCBxLCBsLCByLCBjbCwgY3IsIGNrLCBjaSwgY3N6LCBrOwoJc2Qobik7CglyZXAoaSwgMSwgbiArIDEpewoJCXNkKGFbaV0pOwoJfQoJc2QocSk7CglyZXAoaSwgMCwgcSl7CgkJc2QocXVlcnlbaV0uRi5GKTsgc2QocXVlcnlbaV0uRi5TKTsgc2QocXVlcnlbaV0uUy5GKTsKCQlxdWVyeVtpXS5TLlMgPSBpOwoJfQoJc29ydChxdWVyeSwgcXVlcnkgKyBxLCBjb21wKTsKCWwgPSByID0gMTsKCXN6ID0gMDsKCWluY2FkKGFbMV0pOwoJcmVwKGksIDAsIHEpewoJCWNsID0gcXVlcnlbaV0uRi5GOwoJCWNyID0gcXVlcnlbaV0uRi5TOwoJCWNrID0gcXVlcnlbaV0uUy5GOwoJCWNpID0gcXVlcnlbaV0uUy5TOwoJCXdoaWxlKHIgPCBjcil7CgkJCWluY2FkKGFbciArIDFdKTsKCQkJcisrOwoJCX0JCgkJd2hpbGUobCA+IGNsKXsKCQkJaW5jYWQoYVtsIC0gMV0pOwoJCQktLWw7CgkJfQoJCXdoaWxlKGwgPCBjbCl7CgkJCWRlY2FkKGFbbF0pOwoJCQlsKys7CgkJfQoJCXdoaWxlKHIgPiBjcil7CgkJCWRlY2FkKGFbcl0pOwoJCQktLXI7CgkJfQoJCWFuc1tjaV0gPSAwOwoJCXJlcChqLCBjaywgQil7CgkJCWlmKGNudHBbal0gLSBjbnRuW2pdICE9IDApewoJCQkJYW5zW2NpXSArPSAoY29tKGosIGNrKSAqIChjbnRwW2pdIC0gY250bltqXSkpICUgTU9EOwoJCQkJbm9ybShhbnNbY2ldKTsKCQkJfQoJCX0KCQljc3ogPSAwOwoJCXJlcChqLCAwLCBzeil7CgkJCWlmKGFsaXZlW2pdID09IHRydWUpewoJCQkJayA9IHJpZFtqXTsKCQkJCXJpZFtjc3pdID0gazsKCQkJCWlkW2tdID0gY3N6OwoJCQkJYWxpdmVbY3N6XSA9IHRydWU7CgkJCQljc3orKzsKCQkJCWlmKG11W2tdID09IDAgfHwgY250W2tdIDwgY2spewoJCQkJCWNvbnRpbnVlOwoJCQkJfQoJCQkJaWYobXVba10gPT0gMSl7CgkJCQkJYW5zW2NpXSArPSBjb20oY250W2tdLCBjayk7CgkJCQkJbm9ybShhbnNbY2ldKTsKCQkJCX0KCQkJCWVsc2V7CgkJCQkJYW5zW2NpXSAtPSBjb20oY250W2tdLCBjayk7CgkJCQkJbm9ybShhbnNbY2ldKTsKCQkJCX0KCQkJfQoJCX0KCQlzeiA9IGNzejsKCX0KCXJlcChpLCAwLCBxKXsKCQlwcmludGYoIiVkXG4iLCBhbnNbaV0pOwoJfQoJcmV0dXJuIDA7Cn0K