/*
kotori拿到了一些正整数。她决定从每个正整数取出一个素因子。但是,kotori有强迫症,她不允许两个不同的正整数取出相同的素因子。

她想知道,最终所有取出的数的和的最小值是多少?

注:若 a\bmod k== 0amodk==0,则称 kk 是 aa 的因子。若一个数有且仅有两个因子,则称其是素数。显然1只有一个因子,不是素数
*/

#include <stdio.h>
#include<malloc.h>
#include<limits.h>
#include<math.h>

int n;
int min = INT_MAX; //定义最大整数
int* arr;
int* rec;  //用于存放

int isprime(int k) {
    int i = 0;
    for (i = 2; i <= sqrt(k); i++) {
        if (k % i == 0)
            return 0;
    }
    return 1;

}

void dfs(int* arr, int* rec, int index, int sum) {
    int i, j;
    if (index ==n) { // 递归退出条件,找过所有数的素因子。只有递归完所有arr元素才会到这
        if (sum < min)
            min = sum;
        return;
    }

    for (i = 2; i <= arr[index]; i++) {
        if (arr[index] % i == 0 && isprime(i)) { //是arr[index]的素因子?

            int flag = 0; //是否有相同素因子的标志
            for (j = 0; j < index; j++) {

                if (i == rec[j]) { //i在rec里面
                    flag = 1;
                    break;
                }
            }
            if (flag) { //有相同的素因子
                flag = 0;
                continue;

            } else {
                //没有的话继续查找
                rec[index] = i;
                dfs(arr, rec, index + 1, sum + i);
                rec[index] = 0; //回溯
            }
        }
    }
}


int main() {
    int i;
    scanf("%d", &n);
    arr = (int*)malloc(sizeof(int) * n);
    rec = (int*)malloc(sizeof(int) * n);
    for (i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }

    dfs(arr, rec, 0, 0);

    if (min < INT_MAX)
        printf("%d", min);
    else
        printf("%d", -1);
    free(arr);
    free(rec);
}