// 思路:将每个数都取出一个不同的因子,依次相加,在对比选出最小的,
// 例如第一个数有a, b因子,第二个数有a,c,d因子,那么对比a+c,a+d,b+a,b+c,b+d,得到最小的。

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

int n;             // 全局变量,所有函数随便用
int min = INT_MAX; // 最大int数,用来变小的
int isPrime(int i) {
    for (int j = 2; j <= sqrt(i); j++) {
        if (i % j == 0) {
            return 0;
        }
    }
    return 1;
}

void kotori(int* a, int* b, int index, int sum) {
    if (index == n) {
        // 多种情况比较,选出最小的,如果有因子相同的情况就到不了最后一步
        if (min > sum) {
            min = sum;
        }

        return;
    }
    for (int i = 2; i <= a[index]; i++) {
        if (a[index] % i == 0 && isPrime(i)) {
            // 选出a[index]的因子
            int j = 0;
            for (; j < index; j++) {
                if (i == b[j]) {
                    break;
                }
            } // 和以往进来的因子比较,不是相同的
            if (j == index) {
                b[index] = i; // 不同的就可以进入b数组
                kotori(a, b, index + 1, sum + i);
                b[index] = 0;
            }
        }
    }
}
int main() {
    scanf("%d", &n);

    int* a = (int*)malloc(sizeof(int) * n);  // 装输入数
    int* b = (int*)malloc(sizeof(int) * n);  // 装每个数出的一个因子

    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }

    kotori(a, b, 0, 0);
    if (min == INT_MAX) {
        printf("-1");
    } else {
        printf("%d", min);
    }

    return 0;
}