Экспортированная функция работает в 4 раза медленнее из-за накладных расходов на PInvoke. Рекомендую избегать выноса сложения чисел в функцию и вызова между языками.
Хотите сделать функцию sum в C++, которая будет так же быстра как в C# коде? Вряд ли это возможно из-за реализации методов Math в рантайме с использованием InternalCall.
Добавление ссылки на DLL от C++ проекта может не дать результатов, потому что DLL, полученная из C#, является дотнетовской сборкой, а DLL, скомпилированная из C++, является Portable Executable. Для корректной работы вам нужно настроить копирование C++ DLL в выходную директорию проекта и правильно указать путь к ней в DllImport.
Маленькие методы экспортировать бессмысленно. Рекомендуется написать их сразу на C#.
Использование C++ и PInvoke имеет смысл только в случаях, когда переписать функцию на C# невозможно. Это может быть актуально, например, для работы с библиотеками уровня ffmpeg, sqlite, tensorflow.