#include <iostream>
#include <string>
#include <sstream>
#include <iomanip> 
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <set>
#include <functional>
#include <algorithm>
#include <unordered_map>
#include <unordered_set>
#include <bitset>

using namespace std;

//#pragma GCC optimize("Ofast")
//#pragma GCC optimization("unroll-loops, no-stack-protector")
//#pragma GCC target("avx,avx2,fma")


int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);

	long long n, i, j, k, s, MOD = 1000000007, ans;
	cin >> n;
	vector<long long> a(n);
	for (i = 0; i < n; i++) cin >> a[i];

	vector<long long> dp(n, 0), dp2(n, 0);
	vector<long long> dpc(n, 0), dpc2(n, 0);

	dp[0] = a[0];
	dpc[0] = 1;

	for (i = 1; i < n; i++) {
		dpc[i] = (dpc[i - 1] + dpc2[i - 1]) % MOD;
		dp[i] = (dp[i - 1] + dp2[i - 1] + a[i] * (dpc[i - 1] + dpc2[i - 1])) % MOD;

		dpc2[i] = dpc[i - 1];
		dp2[i] = (dp[i - 1] - a[i] * dpc[i - 1] + MOD * MOD) % MOD;
	}

	ans = (dp[n - 1] + dp2[n - 1]) % MOD;
	cout << ans << "\n";

	return 0;
}

// Author : Sarthak Kapoor
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace std;
using namespace __gnu_pbds;
#define int ll
#define rep(i,n) for(int i=0;i<n;++i)
#define repa(i,a,n) for(int i=a;i<n;++i)
#define repr(i,n) for(int i=n-1;i>=0;--i)
#define ll long long
#define pi pair<int,int> 
#define pii pair<pi,int>
#define vi vector<int>
#define pb push_back 
#define fi first
#define sec second
#define all(v) v.begin(),v.end()
#define s(v) v.size()
ll mod = 1000000007;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());//use rng()%n for numbers in range [0,n-1]
ll gcd(ll a,ll b){
	if(b==0)return a;
	return gcd(b,a%b);
}
ll fastexp(ll x,ll a){
    ll res = 1;
    while(a>0){
        if(a&1){
            res = (res*x)%mod;
        }
        a=a>>1;
        x=(x*x)%mod;
    }
    return res;
}
ll inverse(ll n){
    return fastexp(n,mod-2);
}
template <typename T>
void add(T &a, T b){
	a += b;
	if(a >= mod)a -= mod;
}
template <typename T>
void sub(T &a, T b){
	a -= b;
	if(a < 0)a += mod;
}
template <typename T>
void mul(T &a, T b){
	a *= b;
	if(a >= mod)a %= mod;
}
int co[51];
bool isprime(int x){
	for(int i = 2;i*i<=x;i++){
		if(x%i == 0){
			return false;
		}
	}
	return true;
}
signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int n;
	cin>>n;
	vi v(n);
	rep(i,n){
		cin>>v[i];
	}
	vi p;
	repa(i,2,51){
		if(isprime(i)){
			p.pb(i);
		}
	}
	int m = s(p);
	int ans = 1e18 + 1;
	for(int mask = 1;mask < (1<<m);mask++){
		int cur = 1;
		int flag = 0;
		rep(i,m){
			if((1<<i) & mask){	
				cur *= p[i];
			}
		}
		rep(i,n){
			if(gcd(cur,v[i]) == 1){
				flag = 1;
				break;
			}
		}
		if(flag){
			continue;
		}
		else{
			ans = min(ans,cur);
		}
	}
	cout<<ans;
	// int n;
	// cin>>n;
	// vi v(n);
	// rep(i,n){
	// 	int x;
	// 	cin>>x;
	// 	v[i] = x;
	// 	if(x%2 == 0){
	// 		co[2] = 1;
	// 		while(x%2 == 0){
	// 			x /= 2;
	// 		}
	// 	}
	// 	for(int i = 3;i*i<=x;i+=2){
	// 		if(x%i == 0){
	// 			co[i] = 1;
	// 			while(x%i == 0)x/=i;
	// 		}
	// 	}
	// 	if(x > 1){
	// 		co[x] = 1;
	// 	}
	// }
	// int ans = 1 ;
	// repa(i,1,51){
	// 	if(co[i] > 0){
	// 		cout<<i<<"\n";
	// 		ans *= i;
	// 	}
	// }
	// cout<<ans;
	return 0;
}