#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5 + 10, MAXP = 2e6, MOD = 1e9 + 7;
int n, p[MAXN], fac[MAXP + 1], fp[MAXP + 1], pri[MAXP + 1], n_pri, cp[MAXP + 1],
    cc[MAXP + 1];
bool as_p[MAXN], extra;
long long ans = 1;
void init() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &p[i]);
  for (int i = 2; i <= MAXP; i++) {
    if (!fac[i]) fac[i] = pri[++n_pri] = i, fp[i] = 1;
    for (int j = 1; j <= n_pri && pri[j] * i <= MAXP && pri[j] <= fac[i]; j++)
      fac[pri[j] * i] = pri[j],
                   fp[pri[j] * i] = pri[j] == fac[i] ? fp[i] + 1 : 1;
  }
}
void solve() {
  sort(p + 1, p + n + 1, greater<int>());
  for (int i = 1; i <= n; i++) {
    int x = p[i];
    if (!cp[x])
      as_p[i] = true, cp[x] = cc[x] = 1;
    else {
      as_p[i] = false;
      for (x--; x != 1;) {
        int cnt = fp[x];
        if (cnt > cp[fac[x]])
          cp[fac[x]] = cnt, cc[fac[x]] = 1;
        else if (cnt == cp[fac[x]])
          cc[fac[x]]++;
        for (int j = 1; j <= cnt; j++) x /= fac[x];
      }
    }
  }
  for (int i = 1; i <= n; i++) {
    int x = as_p[i] ? p[i] : p[i] - 1;
    bool flg = true;
    for (; x != 1;) {
      int cnt = fp[x];
      if (cnt == cp[fac[x]] && cc[fac[x]] == 1) flg = false;
      for (int j = 1; j <= cnt; j++) x /= fac[x];
    }
    extra |= flg;
  }
  for (int i = 1; i <= MAXP; i++)
    if (fac[i] == i)
      for (int j = 1; j <= cp[i]; j++) (ans *= i) %= MOD;
  (ans += extra ? 1 : 0) %= MOD;
  printf("%lld\n", ans);
}
int main() {
  init();
  solve();
}
