#include <bits/stdc++.h>   using namespace std;   int get() {     char ch;     while (ch = getchar(), (ch <  0  || ch >  9 ) && ch !=  - )       ;     if (ch ==  - ) {       int s = 0;       while (ch = getchar(), ch >=  0  && ch <=  9 ) s = s * 10 + ch -  0 ;       return -s;     }     int s = ch -  0 ;     while (ch = getchar(), ch >=  0  && ch <=  9 ) s = s * 10 + ch -  0 ;     return s;   }   const int mo = 1e9 + 7;   const int N = 2e6 + 5;   int cnt[N];   int val[N];   int lst[N];   int pri[N], k;   int n;   int tim[N];   bool bz[N];   int main() {     n = get();     for (int i = 1; i <= n; i++) {       int x = get();       cnt[x]++;     }     lst[1] = 1;     for (int i = 2; i <= 2e6; i++) {       if (!lst[i]) pri[++k] = lst[i] = i;       for (int j = 1; j <= k; j++) {         if (1ll * pri[j] * i > 2e6) break;         lst[i * pri[j]] = pri[j];         if (i % pri[j] == 0) break;       }     }     for (int i = 1; i <= 2e6; i++) val[i] = 1;     int C = 0;     for (int i = 2e6; i >= 2; i--) {       for (int T = 1; T <= cnt[i]; T++) {         if (val[i] < i)           bz[i] = 1, tim[i] = 1, val[i] = i;         else {           bz[i - 1] = 1;           int x = i - 1;           while (x > 1) {             int v = lst[x];             int t = 1;             while (x % v == 0) {               x /= v;               t = t * v;             }             if (t > val[v]) {               val[v] = t;               tim[v] = 1;             } else if (val[v] == t)               tim[v]++;           }         }       }     }     for (int i = 1; i <= 2e6; i++)       if (bz[i]) {         bool can = 1;         for (int x = i; x > 1;) {           int v = lst[x], t = 1;           for (; x % v == 0;) x /= v, t *= v;           if (val[v] == t && tim[v] == 1) can = 0;         }         if (can) {           C = 1;           break;         }       }     int ans = 1;     for (int i = 1; i <= 2e6; i++) ans = 1ll * ans * val[i] % mo;     ans = (ans + C) % mo;     cout << ans << endl;     return 0;   }   