#include <bits/stdc++.h>
using namespace std;
template <class... Args>
void Input(Args &...args) {
  (cin >> ... >> args);
}
template <class T>
void InputArray(std::size_t size, T &t) {
  t.resize(size);
  for (auto &e : t) {
    cin >> e;
  }
}
template <class... Args>
void InputArray(std::size_t size, Args &...args) {
  (InputArray(size, args), ...);
}
template <class... Args>
void InputVerticalArray(std::size_t size, Args &...args) {
  (args.resize(size), ...);
  for (int i = 0; i < size; i++) {
    ((cin >> args[i]), ...);
  }
}
template <class... Args>
void Output(const Args &...args) {
  ((cout << args << ' '), ...) << endl;
}
template <class... Args>
void OutputVertical(const Args &...args) {
  ((cout << args << endl), ...);
}
template <class T>
void OutputArray(const T &t) {
  for (const auto &e : t) {
    cout << e << ' ';
  }
  cout << endl;
}
template <class... Args>
void OutputArray(const Args &...args) {
  (OutputArray(args), ...);
}
template <class... Args>
void OutputVerticalArray(const Args &...args) {
  for (int i = 0; i < min({args.size()...}); i++) {
    ((cout << args[i] << ' '), ...) << endl;
  }
}
int main() {
  int n, x, m;
  Input(n, x, m);
  if (n == 1) {
    Output(x);
    return 0;
  }
  if (x == 0) {
    Output(0);
    return 0;
  }
  if (x == 1) {
    Output(n);
    return 0;
  }
  long long s = x;
  vector<int> a;
  decltype(a)::iterator it;
  decltype(a)::reverse_iterator rit;
  a.reserve(m);
  a.push_back(x);
  for (int i = 1; i < n; i++) {
    x *= x;
    x %= m;
    if (x == 0) break;
    if (x == 1) {
      s += n - i;
      break;
    }
    if ((rit = find(a.rbegin(), a.rend(), x)) != a.rend()) {
      it = rit.base();
      int d = distance(it, a.end());
      s += (n - i) / d * accumulate(it, a.end(), 0ll);
      s += accumulate(it, it + (n - i) % d, 0ll);
      break;
    }
    a.push_back(x);
    s += x;
  }
  Output(s);
  return 0;
}
