#include <bits/stdc++.h>   using namespace std;   const int inf = 1e9;   const long long Inf = 1e18;   const int N = 2e6 + 10;   const int mod = 1e9 + 7;   int gi() {     int x = 0, o = 1;     char ch = getchar();     while ((ch <  0  || ch >  9 ) && ch !=  - ) ch = getchar();     if (ch ==  - ) o = -1, ch = getchar();     while (ch >=  0  && ch <=  9 ) x = x * 10 + ch -  0 , ch = getchar();     return x * o;   }   template <typename T>   bool chkmax(T &a, T b) {     return a < b ? a = b, 1 : 0;   };   template <typename T>   bool chkmin(T &a, T b) {     return a > b ? a = b, 1 : 0;   };   int add(int a, int b) { return a + b >= mod ? a + b - mod : a + b; }   int sub(int a, int b) { return a - b < 0 ? a - b + mod : a - b; }   void inc(int &a, int b) { a = (a + b >= mod ? a + b - mod : a + b); }   void dec(int &a, int b) { a = (a - b < 0 ? a - b + mod : a - b); }   int n, p[N], a[N], pw[N], cnt[N];   int pri[N], tot = 0, d[N];   bool vis[N];   void init() {     const int n = 2e6;     for (int i = 2; i <= n; i++) {       if (!vis[i]) pri[++tot] = i, d[i] = i;       for (int j = 1; j <= tot && i * pri[j] <= n; j++) {         vis[i * pri[j]] = 1;         d[i * pri[j]] = pri[j];         if (i % pri[j] == 0) break;       }     }   }   int qpow(int a, int b) {     int ret = 1;     while (b) {       if (b & 1) ret = 1ll * ret * a % mod;       a = 1ll * a * a % mod;       b >>= 1;     }     return ret;   }   int main() {     init();     cin >> n;     for (int i = 1; i <= n; i++) p[i] = gi();     sort(p + 1, p + n + 1);     for (int i = n; i; i--) {       if (!pw[p[i]])         pw[p[i]] = cnt[p[i]] = 1, a[i] = p[i];       else {         int x = p[i] - 1;         a[i] = p[i] - 1;         while (x > 1) {           int y = d[x], sum = 0;           while (x % y == 0) x /= y, sum++;           if (pw[y] < sum)             pw[y] = sum, cnt[y] = 1;           else if (pw[y] == sum)             cnt[y]++;         }       }     }     int tag = 0;     for (int i = n; i; i--) {       int x = a[i], fl = 1;       while (x > 1) {         int y = d[x], sum = 0;         while (x % y == 0) x /= y, sum++;         if (sum == pw[y] && cnt[y] == 1) fl = 0;       }       tag |= fl;     }     int ans = 1;     for (int i = 2; i <= 2000000; i++) ans = 1ll * ans * qpow(i, pw[i]) % mod;     printf( %d n , add(ans, tag));     return 0;   }   