#include <bits/stdc++.h>
using namespace std;
const int N = 1005;
const int Md = 1e9 + 7;
int Bit[N];
int len = 0;
long long n;
long long f[100][100][2];
void Getbit(long long x) {
  while (x) {
    Bit[len++] = x & 1;
    x >>= 1;
  }
  return;
}
long long Dp(int l, int lim, bool Mx) {
  if (l == -1) return 1;
  long long &ans = f[l][lim][Mx];
  if (ans) return ans;
  if (Bit[l] || !Mx) ans = Dp(l - 1, lim + 1, Mx);
  for (int i = 0; i <= (lim && (Mx ? Bit[l] : 1)); i++) {
    ans = (ans + Dp(l - 1, lim, Mx && i == Bit[l]) * max((1 << lim >> 1), 1)) %
          Md;
  }
  return ans;
}
int main() {
  scanf("%lld", &n);
  Getbit(n);
  printf("%lld\n", Dp(len - 1, 0, 1));
  return 0;
}
