#include #include using namespace std; typedef long long int ll; ll gcds[21][21]; vector> pairs; ll numPairs = 0; ll ans = 0; vector optimal; ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; } int main() { ll n; cin >> n; vector a(n); for (auto &it: a) cin >> it; for (ll i = 1; i < 21; ++i) { for (ll j = 1; j < 21; ++j) { gcds[i][j] = gcd(i, j); } } vector counts(20); for (ll i = 0; i < n; ++i) { counts[a[i] - 1]++; } vector row; if (counts[0] != 0) row.emplace_back(1); if (counts[10] != 0) row.emplace_back(11); if (counts[12] != 0) row.emplace_back(13); if (counts[16] != 0) row.emplace_back(17); if (counts[18] != 0) row.emplace_back(19); if (counts[6] != 0) { row.emplace_back(7); if (counts[13] != 0) { row.emplace_back(14); if (counts[1] != 0) row.emplace_back(2); } } else if (counts[13] != 0 && counts[1] != 0) { pairs.emplace_back(make_pair(2, 14)); numPairs++; } else if (counts[13] != 0) pairs.emplace_back(make_pair(14, 14)); else if (counts[1] != 0) pairs.emplace_back(make_pair(2, 2)); for (ll i = 0; i < 20; ++i) { if (counts[i] != 0 && i != 0 && i != 10 && i != 12 && i != 16 && i != 18 && i != 6 && i != 19 && i != 17 && i != 15 && i != 13 && i != 1) { if (i == 9 && counts[19] != 0) { pairs.emplace_back(make_pair(10, 20)); numPairs++; continue; } if (i == 8 && counts[17] != 0) { pairs.emplace_back(make_pair(9, 18)); numPairs++; continue; } if (i == 7 && counts[15] != 0) { pairs.emplace_back(make_pair(8, 16)); numPairs++; continue; } pairs.emplace_back(make_pair(i + 1, i + 1)); } } ll start = -1; if (!row.empty()) start = row[row.size() - 1]; vector perm(pairs.size()); for (ll i = 0; i < perm.size(); ++i) { perm[i] = i; } n = perm.size(); do { for (ll i = 0; i < pow(2, numPairs); ++i) { vector seq; ll curPair = 0; ll cur = 0; for (ll j = 0; j < n; ++j) { if (pairs[perm[j]].first == pairs[perm[j]].second) { if (start != -1 && j == 0) { cur += gcds[start][pairs[perm[j]].first]; seq.emplace_back(pairs[perm[j]].first); continue; } if (j > 0) { cur += gcds[seq[seq.size() - 1]][pairs[perm[j]].first]; } seq.emplace_back(pairs[perm[j]].first); } else { cur += pairs[perm[j]].first; if (((i / (ll) pow(2, curPair)) % 2) == 0) { if (start != -1 && j == 0) { cur += gcds[start][pairs[perm[j]].first]; seq.emplace_back(pairs[perm[j]].first); seq.emplace_back(pairs[perm[j]].second); continue; } if (j > 0) { cur += gcds[seq[seq.size() - 1]][pairs[perm[j]].first]; } seq.emplace_back(pairs[perm[j]].first); seq.emplace_back(pairs[perm[j]].second); } else { if (start != -1 && j == 0) { cur += gcds[start][pairs[perm[j]].second]; seq.emplace_back(pairs[perm[j]].second); seq.emplace_back(pairs[perm[j]].first); continue; } if (j > 0) { cur += gcds[seq[seq.size() - 1]][pairs[perm[j]].second]; } seq.emplace_back(pairs[perm[j]].second); seq.emplace_back(pairs[perm[j]].first); } curPair++; } } if (cur > ans) optimal = seq; ans = max(ans, cur); } } while (next_permutation(perm.begin(), perm.end())); for (ll i = 0; i < 20; ++i) { if (counts[i] != 0) ans += (counts[i] - 1) * (i + 1); } for (ll i = 1; i < row.size(); ++i) { ans += gcds[row[i - 1]][row[i]]; } cout << ans << endl; return 0; }