#include <bits/stdc++.h>
using namespace std;
using namespace std::chrono;
const long long LINF = 0x3fffffffffffffff;
const long long MOD = 1000000007;
const long long MODD = 0x3b800001;
const int INF = 0x3fffffff;
const vector<pair<int, int> > four = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
struct SETTINGS {
  SETTINGS() {
    cin.tie(0);
    cout.tie(0);
    ios::sync_with_stdio(0);
    cout << fixed << setprecision(20);
  };
} SETTINGS;
template <typename T>
inline bool update_min(T& mn, const T& cnt) {
  if (mn > cnt) {
    mn = cnt;
    return 1;
  } else
    return 0;
}
template <typename T>
inline bool update_max(T& mx, const T& cnt) {
  if (mx < cnt) {
    mx = cnt;
    return 1;
  } else
    return 0;
}
template <typename T>
inline T min(vector<T>& vec) {
  return *min_element((vec).begin(), (vec).end());
}
template <typename T>
inline T max(vector<T>& vec) {
  return *max_element((vec).begin(), (vec).end());
}
template <typename T>
inline constexpr T gcd(T a, T b) {
  if (a == b)
    return a;
  else
    return gcd(b, (a - 1) % b + 1);
}
inline constexpr long long POW(long long a, long long b) {
  if (b == 1) return a;
  long long ans = POW(a, b / 2);
  ans *= ans;
  if (b & 1) ans *= a;
  return ans;
}
inline constexpr long long MODPOW(long long a, long long b, long long mod) {
  if (a >= mod) a %= mod;
  if (b == 1) return a;
  long long ans = MODPOW(a, b / 2, mod);
  ans *= ans;
  ans %= mod;
  if (b & 1) {
    ans *= a;
    ans %= mod;
  }
  return ans;
}
inline void in() {}
template <typename T>
istream& operator>>(istream& is, vector<T>& vec);
template <typename T, size_t size>
istream& operator>>(istream& is, array<T, size>& vec);
template <typename T, typename L>
istream& operator>>(istream& is, pair<T, L>& p);
template <typename T>
ostream& operator<<(ostream& os, vector<T>& vec);
template <typename T, typename L>
ostream& operator<<(ostream& os, pair<T, L>& p);
template <typename T>
istream& operator>>(istream& is, vector<T>& vec) {
  for (T& x : vec) is >> x;
  return is;
}
template <typename T, typename L>
istream& operator>>(istream& is, pair<T, L>& p) {
  is >> p.first;
  is >> p.second;
  return is;
}
template <typename T>
ostream& operator<<(ostream& os, vector<T>& vec) {
  os << vec[0];
  for (long long i = 1; i < vec.size(); ++i) {
    os << ' ' << vec[i];
  }
  return os;
}
template <typename T>
ostream& operator<<(ostream& os, deque<T>& vec) {
  os << vec[0];
  for (long long i = 1; i < vec.size(); ++i) {
    os << ' ' << vec[i];
  }
  return os;
}
template <typename T, typename L>
ostream& operator<<(ostream& os, pair<T, L>& p) {
  os << p.first << " " << p.second;
  return os;
}
template <class Head, class... Tail>
inline void in(Head&& head, Tail&&... tail) {
  cin >> head;
  in(move(tail)...);
}
template <typename T>
inline void out(T t) {
  cout << t << endl;
}
inline void out() { cout << '\n'; }
template <class Head, class... Tail>
inline void out(Head head, Tail... tail) {
  cout << head << ' ';
  out(move(tail)...);
}
inline void _in(int& a) { scanf("%d", &a); }
inline void _in(long long& a) { scanf("%lld", &a); }
inline void _in(char& a) { scanf("%c", &a); }
inline void _in(string& a) { cin >> a; }
template <class T>
inline void _in(vector<T>& a) {
  for (auto&& i : a) _in(i);
}
template <class T>
inline void _in(deque<T>& a) {
  for (auto&& i : a) _in(i);
}
signed main() {
  long long n;
  in(n);
  set<long long> factor;
  for (int i = 1; i * i <= n; i++)
    if (n % i == 0) {
      factor.insert(i);
      factor.insert(n / i);
    }
  vector<long long> ans;
  for (auto&& i : factor) {
    ans.push_back(i * (i - 1) * (n / i) / 2 + i);
  }
  out(ans);
}
