I made two functions like below
one is just adding int values with linq
private long GetSumList(List<long> numbers)
{
    return numbers.Sum();
}
the other one is adding int values with Parallel.Foreach
private long GetSumListWithParallel(List<long> numbers)
{
    long retv = 0;
    Parallel.ForEach(numbers, number =>
    {
        retv += number; // It returns different return whenever I execute it.
        //Interlocked.Add(ref retv, number); // It returns always the same value whenever I execute it.
    });
    return retv;
}
I thought I didn't need to care about race condition, when I just adding integer numbers. Just because I thought that adding numbers had nothing to do with the order in which they were executed. if there were subtraction or multiplication, I would have care about race condition.
Why does this function return always different values? And What is the thing I should care about making parallel code?