#include <bits/stdc++.h>
using namespace std;
long long n, l, ar[2000];
long long same[200][200], les[200][200];
long long ans;
long long a0, a1;
void add(long long& a, long long b) {
  a += b;
  if (a >= 1000000007) a -= 1000000007;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin >> n;
  while (n) {
    ++l;
    ar[l] = (n & 1);
    n /= 2;
  }
  same[l][0] = 1;
  for (int i = l; i; --i)
    for (int j = l; j + 1; --j) {
      if (j == 0)
        a0 = 1, a1 = 0;
      else
        a0 = a1 = (1 << (j - 1));
      if (ar[i]) {
        add(les[i - 1][j], same[i][j] * a0 % 1000000007);
        add(same[i - 1][j], same[i][j] * a1 % 1000000007);
        add(same[i - 1][j + 1], same[i][j]);
      } else
        add(same[i - 1][j], same[i][j] * a0 % 1000000007);
      add(les[i - 1][j], les[i][j] * (1 << j) % 1000000007);
      add(les[i - 1][j + 1], les[i][j]);
    }
  ans = 0;
  for (int i = 0; i <= l; i++) add(ans, les[0][i]), add(ans, same[0][i]);
  cout << ans << endl;
  cin.get();
  cin.get();
  return 0;
}
