fun List.lowerBound(target: Int): Int { var min = 0 var max = size while (min < max) { val mid = (min + max) / 2 if (this[mid] < target) { min = mid + 1 }else { max = mid } } return max } const val MAX_VALUE = 200000 fun main() { val n = readLine()!!.trim().toInt() val num = readLine()!!.trim().split(' ').map(String::toInt).sorted() val count = IntArray(MAX_VALUE + 1) for (a in num) { ++count[a] } var result = num.fold(0L){acc, v -> acc + v} * n for (i in 1 until MAX_VALUE) { val m = i.toLong() * count[i] for (j in 1 .. MAX_VALUE / i) { result -= m * (n - num.lowerBound(i * j)) } } println(result) }