using System; using System.Linq; using System.Collections.Generic; class Solution { static List primes = new List(); static long Solve(Dictionary factors, List keys, long remaining) { long result = 1; long maxFactor = 1; foreach (KeyValuePair pair in factors) { if (pair.Value > 0 && pair.Key * pair.Key < remaining) maxFactor = pair.Key; } foreach (long key in keys) { if (key < maxFactor) continue; if (factors[key] > 0) { factors [key]--; result = Math.Max (result, 1 + key * Solve (factors, keys, remaining / key)); factors [key]++; } } return result; } static void PrimeSieve (int n) { bool[] prime = new bool[n + 1]; for (int i = 2; i <= n; i++) { prime [i] = true; } for (int i = 2; i <= n / 2; i++) { if (!prime [i]) continue; for (int k = 2 * i; k <= n; k += i) { prime [k] = false; } primes.Add (i); } } static Dictionary PrimeFactor (long n) { Dictionary result = new Dictionary (); foreach (int i in primes) { if (n % i == 0) { result.Add (i, 0); while (n % i == 0) { n /= i; result [i]++; } } } if (n > 1) result.Add (n, 1); return result; } public static void Main (string[] args) { PrimeSieve ((int)1e6); Console.ReadLine (); long[] nums = Console.ReadLine ().Split (' ').Select (long.Parse).ToArray (); long sum = 0; foreach (long l in nums) { Dictionary factors = PrimeFactor (l); sum += Solve (factors, factors.Keys.ToList (), l); } Console.WriteLine (sum); } }