#include <iostream>
#include <vector>
#include <cmath>
#include <unordered_set>
using namespace std;
// 素因子大概是质因数的意思
// n 不大
// 找出小于a最大值的所有质数
// 找出a中每个值的质因数
// 穷举
bool isBase(int v, const vector<int>& lst) {
    int q = int(ceil(sqrt(v))) +2;
    for(auto b : lst) {
        if(b >= q) {
            break;
        }
        if(v % b == 0) {
            return false;
        }
    }
    return true;
}
vector<int> GetBList(int v) {
    vector<int> all{2,3};
    for(auto i = 4; i <= v; i++) {
        if((i&1) == 0) {
            continue;
        }
        if(isBase(i, all)) {
            all.push_back(i);
        }
    }
    return all;
}
vector<int> GetFac(int v, const vector<int>& lst) {
    vector<int> fac;
    for(auto b : lst) {
        if(v%b == 0) {
            fac.push_back(b);
        }
    }
    return fac;
}
int sumMin = 1e9;
bool ok = false;

void Dfs(const vector<int>& lst, const vector<int>& a, int i, int sum, unordered_set<int>& used) {
    if(i == a.size()) {
        sumMin = min(sumMin,sum);
        ok = true;
        return;
    }
    auto fac = GetFac(a[i], lst);
    for(auto v : fac) {
        if(used.find(v) != used.end()) {
            continue;
        }
        used.insert(v);
        Dfs(lst, a, i+1, sum + v, used);
        used.erase(v);
    }
}
int main() {
    int n;
    cin >> n;
    vector<int> a(n);
    int nMax = 0;
    for(auto& v : a) {
        cin >> v;
        nMax = max(v,nMax);
    }
    auto bLst = GetBList(nMax);
    unordered_set<int> used;
    Dfs(bLst, a, 0, 0, used);
    cout << (ok?sumMin:-1) << endl;
}
// 64 位输出请用 printf("%lld")