#include <bits/stdc++.h>
using namespace std;
long long int MOD = 1000000007LL;
long long int fastpow(long long int base, long long int exp) {
  long long int res = 1;
  while (exp > 0) {
    if (exp % 2 == 1) res = (res * base) % MOD;
    base = (base * base) % MOD;
    exp /= 2;
  }
  return res % MOD;
}
bool isprime[1000005] = {false};
long long int lpf[1000005];
vector<long long int> prims;
void sieve() {
  isprime[1] = true;
  lpf[1] = 1;
  lpf[2] = 2;
  isprime[2] = false;
  for (long long int i = 2; i <= 1000005; ++i) {
    if (isprime[i] == false) {
      prims.push_back(i);
      lpf[i] = i;
      for (long long int j = i + i; j <= 1000005; j += i) {
        lpf[j] = i;
        isprime[j] = true;
      }
    }
  }
}
template <typename T>
T mult(T x, T y, T mod) {
  return (((x % mod) * (y % mod)) % mod);
}
template <typename T>
T add(T x, T y, T mod) {
  return (((x % mod) + (y % mod)) % mod);
}
template <typename T>
T gcd(T x, T y) {
  return (!y ? x : gcd(y, x % y));
}
template <typename T>
T lcm(T x, T y) {
  return ((x * y) / gcd(x, y));
}
long long int CALC(long long int Z, long long int H) {
  return (Z * (2 + (Z - 1) * H) / 2LL);
}
void solveit() {
  vector<long long int> gate;
  long long int numb;
  cin >> numb;
  for (long long int ii = 1; ii <= sqrt(numb); ii++) {
    if (numb % ii == 0) {
      if (numb / ii == ii && 15803002) {
        gate.push_back(CALC(numb / ii, ii));
      } else {
        gate.push_back(CALC(numb / ii, ii));
        gate.push_back(CALC(ii, numb / ii));
      }
    }
  }
  sort(gate.begin(), gate.end());
  for (long long int ii = 0; ii < gate.size(); ++ii) {
    cout << gate[ii] << " ";
  }
}
int32_t main() {
  solveit();
  return 0;
}
