Problem:
Score : 500 points

Problem Statement

Snuke received a positive integer N from Takahashi.
A positive integer m is called a favorite number when the following condition is satisfied:

The quotient and remainder of N divided by m are equal, that is, \lfloor \frac{N}{m} \rfloor = N \bmod m holds.

Find all favorite numbers and print the sum of those.

Constraints

All values in input are integers.

1 \leq N \leq 10^{12}

Input

Input is given from Standard Input in the following format:

N

Output

Print the answer.

Sample Input 1

8

Sample Output 1

10

There are two favorite numbers: 3 and 7. Print the sum of these, 10.

Sample Input 2

1000000000000

Sample Output 2

2499686339916

Watch out for overflow.

Solution in Kotlin (1.0.0) (judge verdict: Accepted)

import java.util.*
import java.math.*
import java.lang.Math.*

val readString: ()->String = {readLine()!!}
val readInt: ()->Int = {readLine()!!.toInt()}
val readLong: ()->Long = {readLine()!!.toLong()}
val readIntArray: ()->IntArray = {readLine()!!.split(' ').map{it.toInt()}.toIntArray()}
val readLongArray: ()->LongArray = {readLine()!!.split(' ').map{it.toLong()}.toLongArray()}
val errPrintln: (String)->Unit = {msg -> System.err.println(msg)}
val MOD = 1e9.toLong()+7
val INF = Int.MAX_VALUE/2
val LINF = Long.MAX_VALUE/2
data class IntPair(val first: Int, val second: Int)
data class To(val idx: Int, val cost: Long)


fun factorize(N: Long): LongArray {
    var factors = ArrayList<Long>()
    var i = 1L
    while(i*i <= N) {
        if (N % i == 0L) {
            val j = N/i
            if (i == j) factors.add(i)
            else {
                factors.add(i)
                factors.add(j)
            }
        }
        i++
    }
    return factors.toLongArray()
}


fun solve(N: Long): Long {
    val fac = factorize(N)
    return fac.filter { it - 1 >  N/it }.map{ it -1 }.sum()
}


fun main(args: Array<String>) {
    val N = readLong()

    val ans = solve(N)

    println(ans)
}