#include <bits/stdc++.h>
using namespace std;

const int MAXV = 1000;
bool isPrime[MAXV + 1];
vector<int> primes;

void init() {
    memset(isPrime, true, sizeof(isPrime));
    isPrime[0] = isPrime[1] = false;
    for (int i = 2; i <= MAXV; i++) {
        if (isPrime[i]) {
            primes.push_back(i);
            for (int j = i * i; j <= MAXV; j += i)
                isPrime[j] = false;
        }
    }
}

void solve() {
    int n;
    cin >> n;
    vector<int> a(n);
    for (int i = 0; i < n; ++i) cin >> a[i];

    vector<vector<int>> fac(n);
    for (int i = 0; i < n; ++i) {
        int x = a[i];
        for (int p : primes) {
            if (p * p > x) break;
            if (x % p == 0) {
                fac[i].push_back(p);
                while (x % p == 0) x /= p;
            }
        }
        if (x > 1) fac[i].push_back(x);
    }

    int best = 1e9;
    vector<bool> used(MAXV + 1, false);

    function<void(int, int)> dfs = [&](int idx, int sum) {
        if (sum >= best) return;
        if (idx == n) {
            best = sum;
            return;
        }
        for (int p : fac[idx]) {
            if (!used[p]) {
                used[p] = true;
                dfs(idx + 1, sum + p);
                used[p] = false;
            }
        }
    };

    dfs(0, 0);
    if (best == 1e9) cout << -1 << '\n';
    else cout << best << '\n';
}

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

    init();
    
    solve();
    return 0;
}