#include <bits/stdc++.h>
const int Mod = 1e9 + 7;
const int maxn = 1000000 + 5;
using namespace std;
long long a[25] = {1,  2,  4,  5,  8,  10, 13, 14, 18, 21, 26,
                   28, 33, 36, 40, 41, 46, 50, 57, 60, 68};
map<long long, long long> mp;
long long dfs(long long x) {
  if (x <= 20) return a[x];
  if (mp[x]) return mp[x];
  if (x % 2)
    return mp[x] = (2 * dfs(x / 2) % Mod + dfs(x / 2 - 1) % Mod) % Mod;
  else
    return mp[x] = (2 * dfs(x / 2 - 1) % Mod + dfs(x / 2) % Mod) % Mod;
}
int main() {
  long long n;
  scanf("%lld", &n);
  printf("%lld\n", dfs(n));
  return 0;
}
