#include <bits/stdc++.h>
using namespace std;
const int nmax = 200005;
const long long mod = 1000 * 1000 * 1000 + 7;
vector<long long> d[5 * nmax];
vector<pair<int, int> > q[nmax];
long long part[nmax], a[nmax], ans[nmax], aib[nmax];
int lst[5 * nmax];
int n, i, j, Q, l, r, x, poz;
long long expo(long long A, int B) {
  long long ret = 1, p2 = A;
  for (int p = 0; p <= 30; p++) {
    if (((1 << p) & B)) ret = (1LL * ret * p2) % mod;
    p2 = (1LL * p2 * p2) % mod;
  }
  return ret;
}
inline int lbit(int x) { return (((x ^ (x - 1))) & x); }
void update(int poz, long long val) {
  for (int idx = poz; idx <= n; idx += lbit(idx))
    aib[idx] = (1LL * aib[idx] * val) % mod;
}
long long compute(int poz) {
  long long ret = 1;
  for (int idx = poz; idx > 0; idx -= lbit(idx))
    ret = (1LL * ret * aib[idx]) % mod;
  return ret;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n;
  part[0] = 1;
  for (i = 1; i <= n; i++) {
    cin >> a[i];
    part[i] = (1LL * part[i - 1] * a[i]) % mod;
  }
  cin >> Q;
  for (i = 1; i <= Q; i++) {
    cin >> l >> r;
    q[r].push_back({l, i});
    ans[i] = (1LL * expo(part[l - 1], mod - 2) * part[r]) % mod;
  }
  int vmax = 1000 * 1000;
  for (i = 2; i <= vmax; i++)
    if (!d[i].size())
      for (j = i; j <= vmax; j += i) d[j].push_back(i);
  for (i = 1; i <= n; i++) aib[i] = 1;
  long long fv;
  for (i = 1; i <= n; i++) {
    x = a[i];
    for (j = 0; j < d[x].size(); j++) {
      poz = lst[d[x][j]];
      if (poz) update(poz, (1LL * d[x][j] * expo(d[x][j] - 1, mod - 2)) % mod);
      update(i, (1LL * (d[x][j] - 1) * expo(d[x][j], mod - 2)) % mod);
      lst[d[x][j]] = i;
    }
    for (j = 0; j < q[i].size(); j++) {
      fv = (1LL * compute(i) * expo(compute(q[i][j].first - 1), mod - 2)) % mod;
      ans[q[i][j].second] = (1LL * ans[q[i][j].second] * fv) % mod;
    }
  }
  for (i = 1; i <= Q; i++) cout << ans[i] << '\n';
  return 0;
}
