#include <bits/stdc++.h>
using namespace std;
const long long maxn = 2e5 + 2, maxm = 1e6 + 5, mod = 1e9 + 7;
long long seg[4 * maxn], inv[maxm], FP[maxm], a[maxn], ans[maxn], prv[maxm];
bitset<maxm> NP;
vector<pair<long long, long long> > vec[maxn];
long long po(long long a, long long b) {
  if (!b) return 1;
  long long y = po(a, b / 2);
  y *= y;
  y %= mod;
  if (b % 2) return y * a % mod;
  return y;
}
void add(long long id, long long L, long long R, long long l, long long r,
         long long x) {
  if (R <= l || r <= L) return;
  if (L >= l && R <= r) {
    seg[id] *= x;
    seg[id] %= mod;
    return;
  }
  long long mid = (L + R) / 2;
  add(2 * id + 0, L, mid, l, r, x);
  add(2 * id + 1, mid, R, l, r, x);
}
long long get(long long id, long long L, long long R, long long idx) {
  if (idx < L || idx >= R) return 1;
  if (R == L + 1) return seg[id];
  long long mid = (L + R) / 2;
  return seg[id] * get(2 * id + 0, L, mid, idx) % mod *
         get(2 * id + 1, mid, R, idx) % mod;
}
int32_t main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  NP[1] = 1;
  for (long long i = 2; i < maxm; i++) {
    if (!NP[i]) {
      FP[i] = i;
      for (long long j = 2 * i; j < maxm; j += i) {
        NP[j] = 1;
        FP[j] = i;
      }
    }
  }
  for (long long i = 1; i < maxm; i++) {
    inv[i] = po(i, mod - 2);
  }
  fill(prv, prv + maxm, -1);
  fill(seg, seg + 4 * maxn, 1);
  long long n;
  cin >> n;
  for (long long i = 0; i < n; i++) cin >> a[i];
  long long q;
  cin >> q;
  for (long long i = 0; i < q; i++) {
    long long l, r;
    cin >> l >> r;
    l--;
    r--;
    vec[r].push_back(pair<long long, long long>(l, i));
  }
  for (long long i = 0; i < n; i++) {
    long long k = a[i];
    add(1, 0, n, 0, i + 1, a[i]);
    while (k > 1) {
      add(1, 0, n, prv[FP[k]] + 1, i + 1, (FP[k] - 1) * inv[FP[k]] % mod);
      long long j = FP[k];
      while (k % j == 0) k /= j;
      prv[j] = i;
    }
    for (pair<long long, long long> P : vec[i]) {
      ans[P.second] = get(1, 0, n, P.first);
    }
  }
  for (long long i = 0; i < q; i++) cout << ans[i] << '\n';
}
