object Solution { def longestSequence(a: Array[Long]): Long = { (a foldLeft 0L) { (totalMoves, barLength) => var remaining = barLength var primes: List[Long] = Nil for (p <- 2 to Math.sqrt(barLength.toDouble).toInt) { while (remaining % p == 0) { remaining /= p primes ::= p } } if (remaining > 1) primes ::= remaining val (_, thisBarsMoves) = (primes foldLeft(1L, 0L)) { case ((bars, moves), p) => (bars * p, moves + bars) } thisBarsMoves + barLength + totalMoves } } def main(args: Array[String]) { val sc = new java.util.Scanner (System.in); var n = sc.nextInt(); var a = new Array[Long](n); for(a_i <- 0 to n-1) { a(a_i) = sc.nextLong(); } val result = longestSequence(a); println(result) } }