main = readLn >>= print . xsum xsum :: Integer -> Integer xsum 1 = 1 xsum 2 = 1 xsum n = foldr dsum 0 [1 .. floor (sqrt (fromIntegral d))] where dsum x acc = if mod d x == 0 then acc + x + div d x else acc d = gcd n (div (n*(n-1)) 2)