#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:10000000")
using namespace std;
template <class T>
T inline sqr(T x) {
  return x * x;
}
const double pi = 3.1415926535897932384626433832795;
const double eps = 1e-8;
long long ans = 0;
bool f(long long x, long long y, long long n) {
  long long s = x + y;
  long long ch = -n / (x * y) + x + y;
  long long zn = 2;
  long long w = ch / zn;
  if (ch == w * zn)
    if (1 <= w && w < x && w < y) {
      long long k1 = x - w, k2 = y - w, k3 = w;
      if (k3 < k2) return true;
      if (k1 == k2) {
        if (k2 == k3)
          ans++;
        else
          ans += 3;
      } else {
        if (k2 == k3)
          ans += 3;
        else
          ans += 6;
      }
    }
  return false;
}
int main() {
  long long n;
  cin >> n;
  if (n % 3 != 0) {
    cout << "0";
    return 0;
  }
  vector<long long> a, b;
  for (long long i = 1; i * i <= n; i++)
    if (n % i == 0) {
      if (i > 0) a.push_back(i);
      if (i * i != n) b.push_back(n / i);
    }
  for (int i = b.size() - 1; i >= 0; i--) a.push_back(b[i]);
  cerr << a.size() << endl;
  n /= 3;
  int Q = 0;
  for (int i = 0; i < a.size(); i++)
    if (n % a[i] == 0) {
      long long d = n / a[i];
      int x = lower_bound(a.begin(), a.end(), d) - a.begin();
      for (int j = x; j >= i; j--)
        if (d % a[j] == 0) {
          if (f(a[i], a[j], n)) break;
        }
    }
  cout << ans;
  return 0;
}
