import std.algorithm;
import std.array;
import std.conv;
import std.math;
import std.range;
import std.stdio;
import std.string;
import std.typecons;

T read(T)() { return readln.chomp.to!T; }
T[] reads(T)() { return readln.split.to!(T[]); }
alias readint = read!int;
alias readints = reads!int;

long calc(long n) {
    // n/m = n%m = k とおく
    // 商が k で、余りが k ということなので
    // n = mk + k
    //   = k(m + 1)
    // と表せる。
    // m は、n の約数から 1 を引いた数、というのが分かる。
    // n の約数は sqrt(n) で列挙できる。

    long ans = 0;
    for (long i = 1; i * i <= n; i++) {
        if (n % i == 0) { // m の候補
            foreach (m; [i - 1, n / i - 1]) {
                if (m > 0 && n / m == n % m) {
                    ans += m;
                }
            }
        }
    }

    return ans;
}

void main() {
    long n = read!long;
    writeln(calc(n));
}
