#include <bits/stdc++.h>
using namespace std;
template <typename T>
T gcd(T a, T b) {
  return b ? gcd(b, a % b) : a;
}
inline void read(int &x) {
  x = 0;
  char c = getchar();
  int f = 1;
  while (c < '0' || c > '9') {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    x = 10 * x + c - '0';
    c = getchar();
  }
  x *= f;
}
void printDouble(double x, int n) {
  cout << fixed << setprecision(n);
  cout << x << endl;
}
const long long mod = 1000000007;
long long e(long long x, long long y) {
  if (y == 1) return x;
  if (y % 2 == 1) return (x * e(x, y - 1)) % mod;
  long long z = e(x, y / 2);
  return (z * z) % mod;
}
long long inverse(long long x) { return e(x, mod - 2); }
int main() {
  long long A, B, n, x;
  cin >> A >> B >> n >> x;
  long long t = e(A, n);
  if (A == 1) {
    cout << (x + (n % mod * B) % mod) % mod;
    return 0;
  }
  long long C = ((((t - 1) * inverse(A - 1)) % mod) * B) % mod;
  cout << ((t * x) % mod + C) % mod;
}
