#include <bits/stdc++.h>
using namespace std;
const int N = 200005, M = 2000005, P = 1000000007;
int p[N], cnt[M], mm[M], cp[N];
int ip[M], pr[M], mp[M], np;
vector<int> F[N];
int main() {
  int n;
  scanf("%d", &n);
  int flag = 0;
  for (int i = 0; i < n; ++i) {
    scanf("%d", p + i);
  }
  sort(p, p + n);
  for (int i = 2; i < M; ++i) {
    if (!ip[i]) {
      pr[np++] = i;
      mp[i] = i;
      for (int j = i + i; j < M; j += i) {
        if (!ip[j]) {
          ip[j] = 1;
          mp[j] = i;
        }
      }
    }
  }
  for (int i = n - 1; i >= 0; --i) {
    if (!cnt[p[i]]) {
      cnt[p[i]] = 1;
      F[i].push_back(p[i]);
    } else {
      int x = p[i] - 1, lt = 0, t = 0, c = 0;
      while (x != 1) {
        t = mp[x];
        if (t != lt) {
          if (cnt[lt] == c) {
            mm[lt] = 1;
          } else if (cnt[lt] < c) {
            cnt[lt] = c;
            mm[lt] = 0;
          }
          lt = t;
          c = 0;
        }
        c++;
        F[i].push_back(t);
        x /= t;
      }
      if (cnt[t] == c) {
        mm[t] = 1;
      } else if (cnt[t] < c) {
        cnt[t] = c;
        mm[t] = 0;
      }
    }
  }
  long long ans = 1;
  for (int i = 0; i < M; ++i) {
    for (int j = 0; j < cnt[i]; ++j) {
      ans = ans * i % P;
    }
  }
  for (int i = n - 1; i >= 0; --i) {
    int t = 0, lt = 0, c = 0, ok = 0;
    for (int j = 0; j < F[i].size(); ++j) {
      t = F[i][j];
      if (t != lt) {
        if (c == cnt[lt] && !mm[lt]) {
          ok = 1;
        }
        c = 0;
        lt = t;
      }
      c++;
    }
    if (c == cnt[t] && !mm[t]) {
      ok = 1;
    }
    if (!ok) {
      flag = 1;
      break;
    }
  }
  ans += flag;
  printf("%I64d\n", ans % P);
}
