Почему при условии true в if его тело не выполняется?

Выполнял следующее задание: Количество всех натуральных делителей натурального числа n обозначается σ0(n). Сумма всех натуральных делителей числа n обозначается σ1(n). Выведите σ0(n) и σ1(n). Задание вроде решил, но в функции SumDivisor при проверке второго условия, даже при истинности не заходит внутрь и не изменяет sum. Пробовал на 6 выводит 3 9, а надо 4 12.

#include <iostream>
#include <iomanip>
#include <algorithm>
#include <vector>
#include <cmath>
#include <set>
#include <map>
#include <string>

using namespace std;

#define lli long long int
#define lld long long double
#define ulli unsigned long long int
#define ulld unsigned long long double

ulli CntDivisor(ulli x, ulli i = 2, ulli cnt = 2)
{
    if (i > sqrt(x))
    {
        return cnt;
    }
    if (x % i == 0)
    {
        ++cnt;
    }
    CntDivisor(x, ++i, cnt);
}

ulli SumDivisor(ulli x, ulli i = 2, ulli sum = 0)
{
    if (i > sqrt(x))
    {
        return sum + 1 + x;
    }
    if (x % i == 0)
    {
        sum += i;
    }
    SumDivisor(x, ++i, sum);
}

int main()
{
    ulli x;
    cin >> x;
    cout << CntDivisor(x) << " " << SumDivisor(x);
    return 0;
}

Ответы (0 шт):