#include <bits/stdc++.h>
using namespace std;
const int N = 33;
const int mod = (int)1e9 + 7;
long long mem[N][N][2];
int x;
void add(long long &x, long long y) {
  x += y;
  x %= mod;
}
long long dp(int pos, int cnt, bool limit) {
  if (pos < 0) return 1;
  long long &res = mem[pos][cnt][limit];
  if (res != -1) return res;
  res = 0;
  int d = (x >> pos) & 1;
  if (!limit || d == 1) add(res, dp(pos - 1, cnt + 1, limit));
  if (cnt == 0) {
    add(res, dp(pos - 1, cnt, limit && (d == 0)));
  } else {
    if (!limit || d == 1) add(res, dp(pos - 1, cnt, limit) << (cnt - 1));
    add(res, dp(pos - 1, cnt, limit && (d == 0)) << (cnt - 1));
  }
  return res;
}
int main() {
  memset(mem, -1, sizeof(mem));
  cin >> x;
  cout << dp(31, 0, 1) << endl;
  return 0;
}
