import Foundation readLine() var sticks = readLine()!.split(separator: " ").map { Int($0)! } var steps = 0 func isPrime(_ number: Int) -> Bool { var divisor = 3 var testLimit = number if number == 2 { return true } if number % 2 == 0 { return false } while testLimit > divisor { if number % divisor == 0 { return false } testLimit = number / divisor divisor += 2 } return true } func smallestDivisiblePrime(of dividend: Int) -> Int { if isPrime(dividend) { return dividend } var primeTest = 2 while primeTest <= dividend { if isPrime(primeTest) { if dividend % primeTest == 0 { return primeTest } } primeTest += 1 if primeTest > 7 { primeTest += 1 } } return dividend } func disectToPrimes(_ stick: Int) -> [Int] { var choppedStick = stick var chops = [Int]() var chop = smallestDivisiblePrime(of: choppedStick) while choppedStick > 1 { if choppedStick % chop != 0 { chop = smallestDivisiblePrime(of: choppedStick) } choppedStick = choppedStick / chop chops.append(chop) } return chops } for stick in sticks { steps += stick if stick != 1 { steps += 1 } let sequence = disectToPrimes(stick) for i in 0 ..< sequence.count { if i == 0 { continue } var disectionSteps = 1 for j in 1 ... i { disectionSteps *= sequence[sequence.count - j] } steps += disectionSteps } } print(steps)